<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>81296</bug_id>
          
          <creation_ts>2012-03-15 18:37:40 -0700</creation_ts>
          <short_desc>[chromium] Store origin/screen space transforms for surface and replica in the surface</short_desc>
          <delta_ts>2012-03-20 22:03:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>81227</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>580017</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-15 18:37:40 -0700</bug_when>
    <thetext>[chromium] Store origin/screen space transforms for surface and replica in the surface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580020</commentid>
    <comment_count>1</comment_count>
      <attachid>132173</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-15 18:42:06 -0700</bug_when>
    <thetext>Created attachment 132173
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580027</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-15 18:52:25 -0700</bug_when>
    <thetext>Two changes worth noting to the damage tracker code that I moved into CCLTHCommon:

1. The origin of the layer owning a surface is the same as the origin of the surface. So the screenSpaceTransforms are the same.

The old code was:

    // The layer&apos;s screen space transform can be written as:
    //   layerScreenSpaceTransform = surfaceScreenSpaceTransform * layerOriginTransform
    // So, to compute the surface screen space, we can do:
    //   surfaceScreenSpaceTransform = layerScreenSpaceTransform * inverse(layerOriginTransform)

    TransformationMatrix layerOriginTransform = renderSurfaceLayer-&gt;drawTransform();
    layerOriginTransform.translate(-0.5 * renderSurfaceLayer-&gt;bounds().width(), -0.5 * renderSurfaceLayer-&gt;bounds().height());
    TransformationMatrix surfaceScreenSpaceTransform = renderSurfaceLayer-&gt;screenSpaceTransform();
    surfaceScreenSpaceTransform.multiply(layerOriginTransform.inverse());

However, the draw transform for the owning layer of a surface is always just a transform from the center of the layer (set in CCLTHCommon.cpp:283). So the layerOriginTransform in the above is the identity matrix.

2. The replicaOriginTransform was wrong when the surface had a non-zero position.

The old code was:

    TransformationMatrix replicaOriginTransform = layer-&gt;renderSurface()-&gt;originTransform();
    replicaOriginTransform.translate(layer-&gt;replicaLayer()-&gt;position().x(), layer-&gt;replicaLayer()-&gt;position().y());
    replicaOriginTransform.multiply(layer-&gt;replicaLayer()-&gt;transform());
    replicaOriginTransform.translate(-layer-&gt;replicaLayer()-&gt;position().x(), -layer-&gt;replicaLayer()-&gt;position().y());

The transform starts with the surface origin at The Origin. It used to subtract the surface&apos;s position, which is the surfaceOriginPosition + anchor. However, what we want is to put the anchor at The Origin, so we should just subtract the anchor.


The replica screen space transform works similarly to the replica origin transform (but finishes with the surface&apos;s screen space transform instead of the surface&apos;s origin transform).

I tested this replica screen space transform out using Shawn&apos;s visualization stuff, and the complicated replica layout tests (using rotation etc) and verified the transforms that way as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580029</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-15 18:56:50 -0700</bug_when>
    <thetext>Note: i want these transforms so i can check occlusion of replicas for culling surfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580688</commentid>
    <comment_count>4</comment_count>
      <attachid>132173</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-16 11:03:23 -0700</bug_when>
    <thetext>Comment on attachment 132173
Patch


Dana - this is awesome!  I had a few comments we should address before final patch.

Everyone else - its probably worth pointing out that this sudden inflation of transforms being stored on surfaces has been long-since coming and I think its appropriate. Transform cleanups will be coming from us over the next several months, and the end result will be much tighter.  I still think dana&apos;s patch here is the right thing to do for now, because it removes a lot of uncomfortable precarious-ness at the expense of storing more per renderSurface.


View in context: https://bugs.webkit.org/attachment.cgi?id=132173&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:453
&gt; +        renderSurface-&gt;setScreenSpaceTransform(layer-&gt;screenSpaceTransform());

Can you please add a unit test to verify if this is still true if there is a child somewhere in the subtree that ends up positioned in negative position w.r.t. to the renderSurface?  i.e. in surfaceSpace a child&apos;s visible rect in surface space positioned at (-10, -20) might change the transform of the surface??  I think it will work, but if it doesn&apos;t then we can&apos;t compute screen space transform directly from its owning layer.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:456
&gt; +            // Compute the transformation matrix used to draw the replica of the render surface.

Could we please re-word this - &quot;used to draw the surface&apos;s replica to the target surface&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:464
&gt; +            TransformationMatrix replicaOriginTransform = layer-&gt;renderSurface()-&gt;originTransform();

can you please add an entry in the comments above  (near the bottom, where all the other transforms are spelled out), to spell out the actual sequence of transforms of the replica?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:467
&gt; +            replicaOriginTransform.translate(layer-&gt;replicaLayer()-&gt;position().x(), layer-&gt;replicaLayer()-&gt;position().y());
&gt; +            replicaOriginTransform.multiply(layer-&gt;replicaLayer()-&gt;transform());
&gt; +            replicaOriginTransform.translate(-anchorPoint.x() * bounds.width(), -anchorPoint.y() * bounds.height());

We should combine these in to a temporary named &quot;surfaceOriginToReplicaOriginTransform&quot;  and re-use it in the code below, to avoid redundancy.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:474
&gt; +            replicaScreenSpaceTransform.translate(layer-&gt;replicaLayer()-&gt;position().x(), layer-&gt;replicaLayer()-&gt;position().y());
&gt; +            replicaScreenSpaceTransform.multiply(layer-&gt;replicaLayer()-&gt;transform());
&gt; +            replicaScreenSpaceTransform.translate(-anchorPoint.x() * bounds.width(), -anchorPoint.y() * bounds.height());

redundancy here to be removed based on comment above =)

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:291
&gt; +    TransformationMatrix replicaLayerTransform;

I would prefer to have a separate test  &quot;verifyTransformsForReplica&quot;, even though its a bit inflated.  I feel like the concepts here are complicated enough to warrant that inflation.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:337
&gt; +    RefPtr&lt;LayerChromium&gt; replicaOfRS1 = LayerChromium::create();

But for this test case, I think its OK to keep the complexity here.

We should update the comments for this test to indicate that its also testing replicas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580871</commentid>
    <comment_count>5</comment_count>
      <attachid>132173</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-16 13:20:15 -0700</bug_when>
    <thetext>Comment on attachment 132173
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=132173&amp;action=review

Thanks Shawn :)

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:453
&gt;&gt; +        renderSurface-&gt;setScreenSpaceTransform(layer-&gt;screenSpaceTransform());
&gt; 
&gt; Can you please add a unit test to verify if this is still true if there is a child somewhere in the subtree that ends up positioned in negative position w.r.t. to the renderSurface?  i.e. in surfaceSpace a child&apos;s visible rect in surface space positioned at (-10, -20) might change the transform of the surface??  I think it will work, but if it doesn&apos;t then we can&apos;t compute screen space transform directly from its owning layer.

The verifyTransformsForSingleRenderSurface test actually does have a child of a surface with position -0.5, -0.5, and the surface transforms are unaffected.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:456
&gt;&gt; +            // Compute the transformation matrix used to draw the replica of the render surface.
&gt; 
&gt; Could we please re-word this - &quot;used to draw the surface&apos;s replica to the target surface&quot;

done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:464
&gt;&gt; +            TransformationMatrix replicaOriginTransform = layer-&gt;renderSurface()-&gt;originTransform();
&gt; 
&gt; can you please add an entry in the comments above  (near the bottom, where all the other transforms are spelled out), to spell out the actual sequence of transforms of the replica?

done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:467
&gt;&gt; +            replicaOriginTransform.translate(-anchorPoint.x() * bounds.width(), -anchorPoint.y() * bounds.height());
&gt; 
&gt; We should combine these in to a temporary named &quot;surfaceOriginToReplicaOriginTransform&quot;  and re-use it in the code below, to avoid redundancy.

done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:474
&gt;&gt; +            replicaScreenSpaceTransform.translate(-anchorPoint.x() * bounds.width(), -anchorPoint.y() * bounds.height());
&gt; 
&gt; redundancy here to be removed based on comment above =)

done.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:291
&gt;&gt; +    TransformationMatrix replicaLayerTransform;
&gt; 
&gt; I would prefer to have a separate test  &quot;verifyTransformsForReplica&quot;, even though its a bit inflated.  I feel like the concepts here are complicated enough to warrant that inflation.

done.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:337
&gt;&gt; +    RefPtr&lt;LayerChromium&gt; replicaOfRS1 = LayerChromium::create();
&gt; 
&gt; But for this test case, I think its OK to keep the complexity here.
&gt; 
&gt; We should update the comments for this test to indicate that its also testing replicas.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580890</commentid>
    <comment_count>6</comment_count>
      <attachid>132361</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-16 13:34:32 -0700</bug_when>
    <thetext>Created attachment 132361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580904</commentid>
    <comment_count>7</comment_count>
      <attachid>132361</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-16 13:45:04 -0700</bug_when>
    <thetext>Comment on attachment 132361
Patch


LGTM except for the following =)


View in context: https://bugs.webkit.org/attachment.cgi?id=132361&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:-81
&gt; -    void setFilters(const FilterOperations&amp; filters) { m_filters = filters; }
&gt; -    const FilterOperations&amp; filters() const { return m_filters; }
&gt; -    SkBitmap applyFilters(LayerRendererChromium*);

This seems irrelevant - did you have a merge conflict when updating your codebase?  We probably don&apos;t mean to remove this, right?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:-84
&gt; -    void setNearestAncestorThatMovesPixels(CCRenderSurface* surface) { m_nearestAncestorThatMovesPixels = surface; }
&gt; -    const CCRenderSurface* nearestAncestorThatMovesPixels() const { return m_nearestAncestorThatMovesPixels; }

And this too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580910</commentid>
    <comment_count>8</comment_count>
      <attachid>132361</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-16 13:49:28 -0700</bug_when>
    <thetext>Comment on attachment 132361
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=132361&amp;action=review

Thanks :)

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:-81
&gt;&gt; -    SkBitmap applyFilters(LayerRendererChromium*);
&gt; 
&gt; This seems irrelevant - did you have a merge conflict when updating your codebase?  We probably don&apos;t mean to remove this, right?

Yes, it just moved up above and the diff is messy.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:-84
&gt;&gt; -    const CCRenderSurface* nearestAncestorThatMovesPixels() const { return m_nearestAncestorThatMovesPixels; }
&gt; 
&gt; And this too

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580917</commentid>
    <comment_count>9</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-16 13:52:15 -0700</bug_when>
    <thetext>ah, I see it now.  no problem then =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583572</commentid>
    <comment_count>10</comment_count>
      <attachid>132361</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-20 16:19:05 -0700</bug_when>
    <thetext>Comment on attachment 132361
Patch

Nice cleanup.  Thanks for all the comments and tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583577</commentid>
    <comment_count>11</comment_count>
      <attachid>132361</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 16:22:33 -0700</bug_when>
    <thetext>Comment on attachment 132361
Patch

Rejecting attachment 132361 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
cceeded at 310 (offset 2 lines).
Hunk #2 succeeded at 367 (offset 2 lines).
Hunk #3 succeeded at 377 (offset 2 lines).
Hunk #4 succeeded at 391 (offset 2 lines).
Hunk #5 succeeded at 401 (offset 2 lines).
Hunk #6 succeeded at 413 (offset 2 lines).
Hunk #7 succeeded at 429 (offset 2 lines).
Hunk #8 succeeded at 496 (offset 2 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Adrienne W...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/12035078</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583751</commentid>
    <comment_count>12</comment_count>
      <attachid>132957</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-20 20:45:51 -0700</bug_when>
    <thetext>Created attachment 132957
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583805</commentid>
    <comment_count>13</comment_count>
      <attachid>132957</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 22:03:15 -0700</bug_when>
    <thetext>Comment on attachment 132957
Patch

Clearing flags on attachment: 132957

Committed r111499: &lt;http://trac.webkit.org/changeset/111499&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583806</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 22:03:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132173</attachid>
            <date>2012-03-15 18:42:06 -0700</date>
            <delta_ts>2012-03-16 13:34:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81296-20120315214205.patch</filename>
            <type>text/plain</type>
            <size>25458</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwOTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiODQ0ZGUzZjIwNzU2
ODVlYzYyY2E5MDBiNTljN2YxMTRkZDg3MC4uN2VjZjVlMmQwMjNkMjM0M2UyZDYyMWIzN2ZhY2Zj
OTM1NTZhZmRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQyIEBACiAyMDEyLTAzLTE1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gU3Rv
cmUgb3JpZ2luL3NjcmVlbiBzcGFjZSB0cmFuc2Zvcm1zIGZvciBzdXJmYWNlIGFuZCByZXBsaWNh
IGluIHRoZSBzdXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MTI5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVuaXQgdGVzdDogQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlUcmFuc2Zv
cm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZQorICAgICAgICAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QudmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY3JlZW5T
cGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnJlcGxpY2FPcmln
aW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpz
ZXRSZXBsaWNhT3JpZ2luVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6c2V0UmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3Jt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VG
b3JSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZGFtYWdlSW5TdXJmYWNlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXREcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVu
ZGVyU3VyZmFjZTo6ZHJhd1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVu
ZGVyU3VyZmFjZTo6c2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoQ0NSZW5kZXJTdXJm
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0UmVwbGljYURyYXdU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpyZXBsaWNhRHJh
d1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldFJlcGxp
Y2FPcmlnaW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpy
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2V0UmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVuZGVyU3VyZmFjZTo6cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKToKKworMjAxMi0wMy0x
NSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21p
dW1dIE1vdmUgb3ZlcmRyYXcgbWV0cmljcyBpbnRvIGEgdGVtcGxhdGVkIGNsYXNzIGZvciBib3Ro
IHBhaW50IGFuZCBkcmF3IG1ldHJpY3MuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MTE1NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcx
MjZmM2IxOWYwNTI2ZTdkYmNlMzRiOWQ2YWY3MmQ2YmU5MjRhMjMuLjBkYTJlNTZjMzNmN2ViZDY5
NDdhOTU1OGQ3YTcxM2UyNjBlOGQ4M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsMTUgQEAKIDIwMTItMDMtMTUgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBTdG9yZSBvcmlnaW4vc2NyZWVuIHNwYWNlIHRyYW5z
Zm9ybXMgZm9yIHN1cmZhY2UgYW5kIHJlcGxpY2EgaW4gdGhlIHN1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMjk2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCisyMDEyLTAzLTE1
ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBvdmVyZHJhdyBtZXRyaWNzIGludG8gYSB0ZW1wbGF0ZWQgY2xhc3MgZm9yIGJvdGgg
cGFpbnQgYW5kIGRyYXcgbWV0cmljcy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxMTU2CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgK
aW5kZXggOTA0NTQyNWJjM2ZiZmYyM2M4MjFmZmZlOGE0YmIwNzM5NWIwZTI4Yy4uOTAxZjVmN2Iw
MWZlZmFmMDczM2MyNmJhNzdlNTRiY2VjMmUwNWNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgKQEAgLTcxLDkgKzcxLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5U
cmFuc2Zvcm07IH0KICAgICB2b2lkIHNldE9yaWdpblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKSB7IG1fb3JpZ2luVHJhbnNmb3JtID0gb3JpZ2lu
VHJhbnNmb3JtOyB9CiAKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOyB9Cisg
ICAgdm9pZCBzZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0pIHsgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVl
blNwYWNlVHJhbnNmb3JtOyB9CisKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVw
bGljYURyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FEcmF3VHJhbnNmb3Jt
OyB9CiAgICAgdm9pZCBzZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcmVwbGljYURyYXdUcmFuc2Zvcm0pIHsgbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSA9
IHJlcGxpY2FEcmF3VHJhbnNmb3JtOyB9CiAKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcmVwbGljYU9yaWdpblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYU9yaWdp
blRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0UmVwbGljYU9yaWdpblRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYU9yaWdpblRyYW5zZm9ybSkgeyBtX3JlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0gPSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9CisKKyAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFJl
cGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVw
bGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKSB7IG1fcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3Jt
ID0gcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9CisKICAgICBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KICAgICB2b2lkIHNldENsaXBS
ZWN0KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBjbGlwUmVjdDsgfQog
CkBAIC0xMDAsOCArMTA5LDExIEBAIHByaXZhdGU6CiAKICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fb3JpZ2luVHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJh
d1RyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FPcmlnaW5UcmFu
c2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhU2NyZWVuU3BhY2VUcmFu
c2Zvcm07CiAgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgSW50UmVjdCBtX2Ns
aXBSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlzdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4IDZhMDYyY2FjYTdjYzU4NzVmMmM5
MjU5OTg1NmI2YTVlYzhlNTNjNzkuLjk2YzVhNWUxODI1Y2ZmZjQ5YmY5M2NjODYxNzcyZWFmOGY3
ZTczMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApAQCAtMjg2LDEyICsyODYs
NyBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3VyZmFjZShD
Q0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdAogICAgICAgICB0YXJnZXREYW1hZ2VSZWN0LnVu
aXRlSWZOb25aZXJvKGRhbWFnZVJlY3RJblRhcmdldFNwYWNlKTsKIAogICAgICAgICBpZiAobGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNh
J3MgIm9yaWdpblRyYW5zZm9ybSIgdGhhdCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmlnaW4g
c3BhY2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlIG9yaWdpbiBzcGFjZS4KLSAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5U
cmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCks
IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOwotICAgICAgICAgICAgcmVw
bGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5z
Zm9ybSgpKTsKLSAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKC1s
YXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCAtbGF5ZXItPnJlcGxpY2FMYXll
cigpLT5wb3NpdGlvbigpLnkoKSk7Ci0KKyAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiByZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+cmVwbGljYU9y
aWdpblRyYW5zZm9ybSgpOwogICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9u
WmVybyhyZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFtYWdlUmVjdEluTG9jYWxTcGFj
ZSkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5jcHAKaW5kZXggYzg2ZDc0ZDg2MWRhZjRlNmUzMjVkMWM1M2ZkNDdmNDk4NjRmODZhOS4u
NGFhOGFiZjlkZjE1MTgzYzc1YTFiNjY4ODkwNTdiYjMwYzAzMGYxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0yODgsMTIgKzI4OCwxMiBAQCBzdGF0
aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXll
clR5cGUqIGxheWVyLCBMYXllcgogICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3T3BhY2l0
eShkcmF3T3BhY2l0eSk7CiAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKIAotICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVk
VHJhbnNmb3JtOwotICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41
ICogYm91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwotICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0obGF5ZXJPcmlnaW5UcmFuc2Zvcm0pOwor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtID0gY29t
YmluZWRUcmFuc2Zvcm07CisgICAgICAgIHN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRl
M2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKyAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0T3JpZ2luVHJhbnNmb3JtKHN1cmZhY2VPcmlnaW5UcmFu
c2Zvcm0pOwogCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgYWdncmVnYXRlIGhpZXJhcmNoeSBtYXRy
aXggdG8gaW5jbHVkZSB0aGUgdHJhbnNmb3JtIG9mIHRoZSBuZXdseSBjcmVhdGVkIFJlbmRlclN1
cmZhY2UuCi0gICAgICAgIG5leHRIaWVyYXJjaHlNYXRyaXgubXVsdGlwbHkobGF5ZXJPcmlnaW5U
cmFuc2Zvcm0pOworICAgICAgICBuZXh0SGllcmFyY2h5TWF0cml4Lm11bHRpcGx5KHN1cmZhY2VP
cmlnaW5UcmFuc2Zvcm0pOwogCiAgICAgICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBjbGlwUmVj
dCBjb250cmlidXRlcyB0byB0aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMgdG8KICAgICAgICAg
Ly8gYmUgYXBwbGllZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2Ugb250byBpdHMg
Y29udGFpbmluZwpAQCAtNDQ5LDE0ICs0NDksMzAgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIK
ICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSArIGNl
bnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lkdGgoKSwgc3VyZmFjZUNlbnRlci55KCkgKyBjZW50
ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdodCgpLCAwKTsKICAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKIAotICAgICAgICAvLyBDb21wdXRl
IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNlZCB0byBkcmF3IHRoZSByZXBsaWNhIG9mIHRo
ZSByZW5kZXIKLSAgICAgICAgLy8gc3VyZmFjZS4KKyAgICAgICAgLy8gVGhlIGxheWVyJ3Mgb3Jp
Z2luIGlzIGVxdWFsIHRvIHRoZSBzdXJmYWNlJ3Mgb3JpZ2luIHNvIHRoZSBzY3JlZW5TcGFjZVRy
YW5zZm9ybSBpcyB0aGUgc2FtZS4KKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0obGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCiAgICAgICAgIGlm
IChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCB1c2VkIHRvIGRyYXcgdGhlIHJlcGxpY2Egb2YgdGhlIHJlbmRl
ciBzdXJmYWNlLgogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYURyYXdU
cmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKLSAgICAgICAgICAg
IHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDAp
OworICAgICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRp
b24oKS55KCkpOwogICAgICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkobGF5
ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICByZXBsaWNhRHJh
d1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hvclBvaW50Lngo
KSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBvaW50LnkoKSAq
IGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS50
cmFuc2xhdGUoc3VyZmFjZUNlbnRlci54KCkgLSBhbmNob3JQb2ludC54KCkgKiBib3VuZHMud2lk
dGgoKSwgc3VyZmFjZUNlbnRlci55KCkgLSBhbmNob3JQb2ludC55KCkgKiBib3VuZHMuaGVpZ2h0
KCkpOwogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0UmVwbGljYURyYXdUcmFuc2Zvcm0o
cmVwbGljYURyYXdUcmFuc2Zvcm0pOworCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBs
aWNhJ3MgIm9yaWdpblRyYW5zZm9ybSIgdGhhdCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmln
aW4gc3BhY2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlIG9yaWdpbiBzcGFjZS4KKyAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmln
aW5UcmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54
KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOworICAgICAgICAgICAg
cmVwbGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRy
YW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRl
KC1hbmNob3JQb2ludC54KCkgKiBib3VuZHMud2lkdGgoKSwgLWFuY2hvclBvaW50LnkoKSAqIGJv
dW5kcy5oZWlnaHQoKSk7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhT3Jp
Z2luVHJhbnNmb3JtKHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0pOworCisgICAgICAgICAgICAvLyBD
b21wdXRlIHRoZSByZXBsaWNhJ3MgInNjcmVlblNwYWNlVHJhbnNmb3JtIiB0aGF0IG1hcHMgZnJv
bSB0aGUgcmVwbGljYSdzIG9yaWdpbiBzcGFjZSB0byB0aGUgc2NyZWVuJ3Mgb3JpZ2luIHNwYWNl
LgorICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYVNjcmVlblNwYWNlVHJh
bnNmb3JtID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsK
KyAgICAgICAgICAgIHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUobGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5w
b3NpdGlvbigpLnkoKSk7CisgICAgICAgICAgICByZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0u
bXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAgICAg
ICByZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKC1hbmNob3JQb2ludC54KCkg
KiBib3VuZHMud2lkdGgoKSwgLWFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0o
cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElm
IGEgcmVuZGVyIHN1cmZhY2UgaGFzIG5vIGxheWVyIGxpc3QsIHRoZW4gaXQgYW5kIG5vbmUgb2Yg
aXRzIGNoaWxkcmVuIG5lZWRlZCB0byBnZXQgZHJhd24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCmluZGV4IDc5ODU4YzZhOWNlNjcxMTc4MGVjZWFlMDUwOWM2Y2I5Y2Yx
YWQ5NDEuLmE2NTRmMzdjM2M0M2M3ZjI5ODZkMDgxYzY5MWViMTQ1YWQ1ZDBjZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xOTYsMjcgKzE5NiwxMiBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXll
ckltcGwqIHJvb3REcmF3TGF5ZXIsCiAgICAgfQogfQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25N
YXRyaXggY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFjZShDQ0xheWVySW1wbCog
cmVuZGVyU3VyZmFjZUxheWVyKQotewotICAgIC8vIFRoZSBsYXllcidzIHNjcmVlbiBzcGFjZSB0
cmFuc2Zvcm0gY2FuIGJlIHdyaXR0ZW4gYXM6Ci0gICAgLy8gICBsYXllclNjcmVlblNwYWNlVHJh
bnNmb3JtID0gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtICogbGF5ZXJPcmlnaW5UcmFuc2Zv
cm0KLSAgICAvLyBTbywgdG8gY29tcHV0ZSB0aGUgc3VyZmFjZSBzY3JlZW4gc3BhY2UsIHdlIGNh
biBkbzoKLSAgICAvLyAgIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IGxheWVyU2NyZWVu
U3BhY2VUcmFuc2Zvcm0gKiBpbnZlcnNlKGxheWVyT3JpZ2luVHJhbnNmb3JtKQotCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUo
LTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIHJlbmRl
clN1cmZhY2VMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVs
dGlwbHkobGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLQotICAgIHJldHVybiBzdXJm
YWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm07Ci19Ci0KIHN0YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5T
dXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxvYXRS
ZWN0JiByb290RGFtYWdlUmVjdCkKIHsKICAgICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7
CiAgICAgLy8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBh
cyB0aGUgZGFtYWdlIGZvcgogICAgIC8vIGFsbCBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZl
IHRyYW5zZm9ybXMuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zv
cm0gPSBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNlKHJlbmRlclN1cmZhY2VM
YXllcik7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNm
b3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCk7CiAgICAgaWYgKHNjcmVlblNwYWNlVHJhbnNmb3JtLmhhc1BlcnNwZWN0aXZlKCkp
IHsKICAgICAgICAgLy8gUGVyc3BlY3RpdmUgcHJvamVjdGlvbnMgZG8gbm90IHBsYXkgbmljZSB3
aXRoIG1hcFJlY3Qgb2YKICAgICAgICAgLy8gaW52ZXJzZSB0cmFuc2Zvcm1zLiBJbiB0aGlzIHVu
Y29tbW9uIGNhc2UsIGl0cyBzaW1wbGVyIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmlu
ZGV4IGI1Y2QzYTgzNDQwYTdhYzI5NWU4MDE1YmYxZGU2N2JlMTg3N2I1ODcuLjhkOTViNDBjMjlj
YjYyZTZhMjY1NWFmNTU0NzVkZWY2ZmFmZWNmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5oCkBAIC03MCw5ICs3MCw2IEBAIHB1YmxpYzoKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZs
b2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KIAotICAgIHZvaWQgc2V0
RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkg
eyBtX2RyYXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9Ci0gICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zv
cm07IH0KLQogICAgIHZvaWQgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0
ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IH0KICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJzOyB9CiAgICAgU2tCaXRtYXAgYXBw
bHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwpAQCAtODAsMTIgKzc3LDI0IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyhDQ1JlbmRl
clN1cmZhY2UqIHN1cmZhY2UpIHsgbV9uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSBz
dXJmYWNlOyB9CiAgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBuZWFyZXN0QW5jZXN0b3JUaGF0
TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX25lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1Bp
eGVsczsgfQogCi0gICAgdm9pZCBzZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcmVwbGljYURyYXdUcmFuc2Zvcm0pIHsgbV9yZXBsaWNhRHJhd1RyYW5z
Zm9ybSA9IHJlcGxpY2FEcmF3VHJhbnNmb3JtOyB9Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHJlcGxpY2FEcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhRHJh
d1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNm
b3JtOyB9CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KIAogICAgIHZvaWQgc2V0T3JpZ2luVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0pIHsgbV9v
cmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KICAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5UcmFu
c2Zvcm07IH0KIAorICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtKSB7IG1fc2NyZWVuU3BhY2VUcmFu
c2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0UmVwbGljYURyYXdUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FEcmF3VHJhbnNmb3JtKSB7IG1fcmVwbGljYURy
YXdUcmFuc2Zvcm0gPSByZXBsaWNhRHJhd1RyYW5zZm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGljYURyYXdUcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0UmVwbGljYU9yaWdpblRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYU9yaWdpblRyYW5zZm9ybSkgeyBt
X3JlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9CisgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX3JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0UmVw
bGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBs
aWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0pIHsgbV9yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0g
PSByZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KKwogICAgIHZvaWQgc2V0Q2xpcFJlY3QoY29u
c3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9jbGlwUmVjdDsgfQogCkBAIC0xMzIsOCArMTQxLDExIEBAIHByaXZhdGU6CiAgICAgT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKICAgICBmbG9hdCBtX2RyYXdP
cGFjaXR5OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fb3JpZ2luVHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBs
aWNhRHJhd1RyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FPcmln
aW5UcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm07CiAgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgSW50UmVj
dCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IG1fbGF5ZXJMaXN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAKaW5kZXggZTYyMDZjYzU4ZjkwMzNiNWZmY2FhNjllZWI0ZDI5MGYzNTFl
ZDNmMy4uOTNhZWFiZDFhZTY5NjFhYTMyNDk2Yzg1MDQwNjI1YmNhNjlhZjY1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QuY3BwCkBAIC0yNjUsMTAgKzI2NSwxMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogewogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRSZXBsaWNhID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBncmFuZENoaWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOwogICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHBh
cmVudC0+YWRkQ2hpbGQoY2hpbGQpOwogICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsK
KyAgICBjaGlsZC0+c2V0UmVwbGljYUxheWVyKGNoaWxkUmVwbGljYS5nZXQoKSk7CiAKICAgICAv
LyBDaGlsZCBpcyBzZXQgdXAgc28gdGhhdCBhIG5ldyByZW5kZXIgc3VyZmFjZSBzaG91bGQgYmUg
Y3JlYXRlZC4KICAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKQEAgLTI4Niw2ICsyODgsOSBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5n
bGVSZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAgKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVy
ICogcGFyZW50U3VibGF5ZXJNYXRyaXggKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLmludmVy
c2UoKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7
CiAgICAgY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg4LjAsIDkuMCk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYUxheWVyVHJhbnNmb3JtOworICAgIHJlcGxpY2FM
YXllclRyYW5zZm9ybS5zY2FsZTNkKDMuMCwgMy4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlcGxpY2FDb21wb3NpdGVUcmFuc2Zvcm0gPSBwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0gKiByZXBsaWNhTGF5ZXJUcmFuc2Zvcm07CiAKICAgICAvLyBDaGlsZCdzIHJlbmRlciBzdXJm
YWNlIHNob3VsZCBub3QgZXhpc3QgeWV0LgogICAgIEFTU0VSVF9GQUxTRShjaGlsZC0+cmVuZGVy
U3VyZmFjZSgpKTsKQEAgLTI5Myw2ICsyOTgsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9y
bSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQ
b2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJ
bnRTaXplKDE2LCAxOCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgtMC41ZiwgLTAuNWYpLCBJbnRTaXplKDEsIDEp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZFJlcGxpY2Eu
Z2V0KCksIHJlcGxpY2FMYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNl
KTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSk7CiAKICAgICAvLyBSZW5kZXIgc3VyZmFjZSBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0
ZWQgbm93LgpAQCAtMzA4LDYgKzMxNCwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CiAgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CiAKKyAgICAvLyBUaGUgc2Ny
ZWVuIHNwYWNlIGlzIHRoZSBzYW1lIGFzIHRoZSB0YXJnZXQgc2luY2UgdGhlIGNoaWxkIHN1cmZh
Y2UgZHJhd3MgaW50byB0aGUgcm9vdC4KKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01B
VFJJWF9FUShyZXBsaWNhQ29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5yZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEocmVwbGljYUNvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogfQogCiBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJTdXJm
YWNlSGllcmFyY2h5KQpAQCAtMzI0LDYgKzMzNCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkT2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkT2ZSUzEgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRPZlJTMiA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhT2ZS
UzEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cmVwbGljYU9mUlMyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGdyYW5kQ2hpbGRPZlJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGRP
ZlJTMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgp
KTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5k
Q2hpbGRPZlJTMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpKTsKQEAgLTMzNiw2ICszNDgsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIGNoaWxk
T2ZSb290LT5hZGRDaGlsZChncmFuZENoaWxkT2ZSb290KTsKICAgICBjaGlsZE9mUlMxLT5hZGRD
aGlsZChncmFuZENoaWxkT2ZSUzEpOwogICAgIGNoaWxkT2ZSUzItPmFkZENoaWxkKGdyYW5kQ2hp
bGRPZlJTMik7CisgICAgcmVuZGVyU3VyZmFjZTEtPnNldFJlcGxpY2FMYXllcihyZXBsaWNhT2ZS
UzEuZ2V0KCkpOworICAgIHJlbmRlclN1cmZhY2UyLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYU9m
UlMyLmdldCgpKTsKIAogICAgIC8vIEluIGNvbWJpbmF0aW9uIHdpdGggZGVzY2VuZGFudERyYXdz
Q29udGVudCwgb3BhY2l0eSAhPSAxIGZvcmNlcyB0aGUgbGF5ZXIgdG8gaGF2ZSBhIG5ldyByZW5k
ZXJTdXJmYWNlLgogICAgIHJlbmRlclN1cmZhY2UxLT5zZXRPcGFjaXR5KDAuNWYpOwpAQCAtMzQ0
LDYgKzM1OCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAgLy8gQWxsIGxheWVycyBpbiB0aGUg
dHJlZSBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBhbmNob3IgYXQgMi41IGFuZCBhIHNpemUgb2Yg
KDEwLDEwKS4KICAgICAvLyBtYXRyaXggIkEiIGlzIHRoZSBjb21wb3NpdGUgbGF5ZXIgdHJhbnNm
b3JtIHVzZWQgaW4gYWxsIGxheWVycywgY2VudGVyZWQgYWJvdXQgdGhlIGFuY2hvciBwb2ludAog
ICAgIC8vIG1hdHJpeCAiQiIgaXMgdGhlIHN1YmxheWVyIHRyYW5zZm9ybSB1c2VkIGluIGFsbCBs
YXllcnMsIGNlbnRlcmVkIGFib3V0IHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIGxheWVyLgor
ICAgIC8vIG1hdHJpeCAiUiIgaXMgdGhlIGNvbXBvc2l0ZSByZXBsaWNhIHRyYW5zZm9ybSB1c2Vk
IGluIGFsbCByZXBsaWNhIGxheWVycy4KICAgICAvLwogICAgIC8vIHggY29tcG9uZW50IHRlc3Rz
IHRoYXQgbGF5ZXJUcmFuc2Zvcm0gYW5kIHN1YmxheWVyVHJhbnNmb3JtIGFyZSBkb25lIGluIHRo
ZSByaWdodCBvcmRlciAodHJhbnNsYXRpb24gYW5kIHNjYWxlIGFyZSBub25jb21tdXRhdGl2ZSku
CiAgICAgLy8geSBjb21wb25lbnQgaGFzIGEgdHJhbnNsYXRpb24gYnkgMS4wIGZvciBldmVyeSBh
bmNlc3Rvciwgd2hpY2ggaW5kaWNhdGVzIHRoZSAiZGVwdGgiIG9mIHRoZSBsYXllciBpbiB0aGUg
aGllcmFyY2h5LgpAQCAtMzU1LDkgKzM3MCwxMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIGxh
eWVyVHJhbnNmb3JtLnRyYW5zbGF0ZSgxLjAsIDEuMCk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggc3VibGF5ZXJUcmFuc2Zvcm07CiAgICAgc3VibGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgxMC4w
LCAxLjAsIDEuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYUxheWVyVHJhbnNm
b3JtOworICAgIHJlcGxpY2FMYXllclRyYW5zZm9ybS5zY2FsZTNkKC0yLjAsIDUuMCwgMS4wKTsK
IAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IEEgPSB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5
ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBCID0gdHJhbnNsYXRpb25Ub0NlbnRlciAqIHN1YmxheWVyVHJhbnNmb3Jt
ICogdHJhbnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggUiA9IEEgKiB0cmFuc2xhdGlvblRvQW5jaG9yICogcmVwbGljYUxheWVyVHJhbnNmb3JtICog
dHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CiAKICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3Jt
LCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6
ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5k
ZXJTdXJmYWNlMS5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9h
dFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwg
MTApLCBmYWxzZSk7CkBAIC0zNjgsNiArMzg2LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGRPZlJvb3QuZ2V0KCksIGxheWVy
VHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZs
b2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwogICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZE9mUlMxLmdldCgpLCBsYXllclRyYW5z
Zm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBv
aW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGRPZlJTMi5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0s
IHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgy
LjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhyZXBsaWNhT2ZSUzEuZ2V0KCksIHJlcGxpY2FMYXllclRyYW5zZm9ybSwg
c3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwg
SW50U2l6ZSgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZXBs
aWNhT2ZSUzIuZ2V0KCksIHJlcGxpY2FMYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0s
IEZsb2F0UG9pbnQoKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgpLCBmYWxzZSk7
CiAKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSk7CiAKQEAgLTQzMyw4ICs0NTMsMTQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICAv
LwogICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBpcyBkZXNjcmli
ZWQgd2l0aCByZXNwZWN0IHRvIHJvb3QuCiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJ
WF9FUShBICogQiAqIEEsIHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRy
YW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICog
UiwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKS0+cmVwbGljYU9yaWdpblRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSwgcmVu
ZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cisg
ICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIFIsIHJlbmRlclN1cmZh
Y2UxLT5yZW5kZXJTdXJmYWNlKCktPnJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKICAg
ICAvLyBPcmlnaW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3JpYmVkIHdp
dGggcmVzcGVjdCB0byByZW5kZXIgc3VyZmFjZSAyLgogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdp
blRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEIgKiBS
LCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5yZXBsaWNhT3JpZ2luVHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAq
IEEsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBICogQiAq
IFIsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCktPnJlcGxpY2FTY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKIAogICAgIC8vIFNhbml0eSBjaGVjay4gSWYgdGhlc2UgZmFpbCB0aGVyZSBp
cyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgdGVzdCBpdHNlbGYuCiAgICAgLy8gSXQgaXMgZXhwZWN0
ZWQgdGhhdCB3ZSBjb3JyZWN0bHkgc2V0IHVwIHRyYW5zZm9ybXMgc28gdGhhdCB0aGUgeS1jb21w
b25lbnQgb2YgdGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132361</attachid>
            <date>2012-03-16 13:34:32 -0700</date>
            <delta_ts>2012-03-20 20:45:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81296-20120316163429.patch</filename>
            <type>text/plain</type>
            <size>29107</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE4MDRkN2E3Mzc5ZjFi
OTc3OTBkZjE3MWMzZGRkZDdiMDQyODJhMi4uY2FhOGI1Y2NlYWZlZmUzZGY3OTQwZTE1MGRkOTgw
NWQ0MTg1OGZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAzLTE1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU3Rv
cmUgb3JpZ2luL3NjcmVlbiBzcGFjZSB0cmFuc2Zvcm1zIGZvciBzdXJmYWNlIGFuZCByZXBsaWNh
IGluIHRoZSBzdXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MTI5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENvbXB1dGUgYW5kIHNhdmUgYSBudW1iZXIgb2YgdHJhbnNmb3JtcyBmb3IgcmVuZGVy
IHN1cmZhY2VzLiBUaGUgb3JpZ2luCisgICAgICAgIHRyYW5mb3JtIGZvciB0aGUgcmVwbGljYSBp
bnRvIGl0cyB0YXJnZXQgc3VyZmFjZS4gVGhlIG9yaWdpbiB0cmFuc2Zvcm0KKyAgICAgICAgZm9y
IHRoZSByZXBsaWNhIGludG8gdGhlIHNjcmVlbi4gQW5kIHRoZSBvcmlnaW4gdHJhbnNmb3JtIGZv
ciB0aGUgc3VyZmFjZQorICAgICAgICBpbnRvIHRoZSBzY3JlZW4uCisKKyAgICAgICAgVGhlc2Ug
dHJhbnNmb3JtcyB3aWxsIGFsbG93IHVzIHRvIGRldGVjdCBvY2NsdXNpb24gb2YgcmVuZGVyIHN1
cmZhY2VzLAorICAgICAgICBhbGxvd2luZyB1cyB0byBjdWxsIChvciBwYXJ0aWFsbHktY3VsbCkg
dGhlIHJlbmRlciBzdXJmYWNlIHF1YWQgZHVyaW5nCisgICAgICAgIGRyYXdpbmcuCisKKyAgICAg
ICAgVGhpcyBhbHNvIGZpeGVzIGEgc3VidGxlIGJ1ZyBpbiB0aGUgdHJhbnNmb3JtcyB1c2VkIGJ5
IHRoZSBkYW1hZ2UKKyAgICAgICAgdHJhY2tpbmcgY29kZS4KKworICAgICAgICBVbml0IHRlc3Q6
IENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRl
clN1cmZhY2UKKyAgICAgICAgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZl
cmlmeVRyYW5zZm9ybXNGb3JSZXBsaWNhCisgICAgICAgICAgICAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC52ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeQor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNjcmVlblNw
YWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoUmVuZGVyU3VyZmFjZUNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVwbGljYU9yaWdp
blRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnNl
dFJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpyZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzZXRSZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZv
clJlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpkYW1hZ2VJblN1cmZhY2VTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclN1cmZhY2U6OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3Vy
ZmFjZTo6c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpzY3JlZW5TcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChDQ1JlbmRlclN1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXRSZXBsaWNhRHJhd1Ry
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlcGxpY2FEcmF3
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0UmVwbGlj
YU9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJl
cGxpY2FPcmlnaW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpzZXRSZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpyZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorCiAyMDEyLTAzLTE2
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUaGUgSURM
IHBhcnNlciBzaG91bGQgc3VwcG9ydCBzZXF1ZW5jZTxUPiB0eXBlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGNkNjhiMWUyMzZiOTk1YmRjZGI4YTJlMGMzNjBiNGQ4YTUzOGVkZjUuLjA2
ZGE3NmMxNGVlZjgxOTQzMTc4Yzk2OWFmZWVkMDU2MDc0MGJlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDMtMTUgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBTdG9yZSBvcmlnaW4vc2Ny
ZWVuIHNwYWNlIHRyYW5zZm9ybXMgZm9yIHN1cmZhY2UgYW5kIHJlcGxpY2EgaW4gdGhlIHN1cmZh
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMjk2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorCiAyMDEyLTAzLTE2ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gVGhyZWFkZWQgb3BhY2l0eSBhbmltYXRpb24ganVtcCB0byBvcGFj
aXR5IG9mIDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggM2EzMDRjMTg1
ZDdmOTMyNTJmNDQzY2M0MjM0NjFjOTlhYjk3Y2RkZi4uZDNjMmE2MjY2NzJlNmI3ZjFhNGMwOWI0
ZTYxZGU2MjI1NDJhYTAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAg
LTc0LDkgKzc0LDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
b3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5UcmFuc2Zvcm07IH0KICAg
ICB2b2lkIHNldE9yaWdpblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3Jp
Z2luVHJhbnNmb3JtKSB7IG1fb3JpZ2luVHJhbnNmb3JtID0gb3JpZ2luVHJhbnNmb3JtOyB9CiAK
KyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRTY3Jl
ZW5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VU
cmFuc2Zvcm0pIHsgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3Jt
OyB9CisKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYURyYXdUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOyB9CiAgICAgdm9pZCBz
ZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGlj
YURyYXdUcmFuc2Zvcm0pIHsgbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSA9IHJlcGxpY2FEcmF3VHJh
bnNmb3JtOyB9CiAKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYU9yaWdp
blRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYU9yaWdpblRyYW5zZm9ybTsgfQor
ICAgIHZvaWQgc2V0UmVwbGljYU9yaWdpblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcmVwbGljYU9yaWdpblRyYW5zZm9ybSkgeyBtX3JlcGxpY2FPcmlnaW5UcmFuc2Zvcm0g
PSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9CisKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9yZXBs
aWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFJlcGxpY2FTY3JlZW5TcGFj
ZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYVNjcmVlblNwYWNl
VHJhbnNmb3JtKSB7IG1fcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVwbGljYVNjcmVl
blNwYWNlVHJhbnNmb3JtOyB9CisKICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KICAgICB2b2lkIHNldENsaXBSZWN0KGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KSB7IG1fY2xpcFJlY3QgPSBjbGlwUmVjdDsgfQogCkBAIC0xMDQsOCArMTEz
LDExIEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKICAgICBib29sIG1fZHJh
d09wYWNpdHlJc0FuaW1hdGluZzsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFu
c2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9yZXBsaWNhT3JpZ2luVHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmVw
bGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOwogICAgIEZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJz
OwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gbV9sYXllckxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAppbmRleCA2
YTA2MmNhY2E3Y2M1ODc1ZjJjOTI1OTk4NTZiNmE1ZWM4ZTUzYzc5Li45NmM1YTVlMTgyNWNmZmY0
OWJmOTNjYzg2MTc3MmVhZjhmN2U3MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5j
cHAKQEAgLTI4NiwxMiArMjg2LDcgQEAgdm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFn
ZUZvclJlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqIGxheWVyLCBGbG9hdFJlY3QKICAgICAgICAg
dGFyZ2V0RGFtYWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSk7
CiAKICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgcmVwbGljYSdzICJvcmlnaW5UcmFuc2Zvcm0iIHRoYXQgbWFwcyBmcm9tIHRo
ZSByZXBsaWNhJ3Mgb3JpZ2luIHNwYWNlIHRvIHRoZSB0YXJnZXQgc3VyZmFjZSBvcmlnaW4gc3Bh
Y2UuCi0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhT3JpZ2luVHJhbnNm
b3JtID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCk7Ci0gICAgICAg
ICAgICByZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZShsYXllci0+cmVwbGljYUxheWVy
KCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgp
KTsKLSAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJl
cGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICByZXBsaWNhT3JpZ2luVHJh
bnNmb3JtLnRyYW5zbGF0ZSgtbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwg
LWxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOwotCisgICAgICAgICAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYU9yaWdpblRyYW5zZm9ybSA9IHJlbmRl
clN1cmZhY2UtPnJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKTsKICAgICAgICAgICAgIHRhcmdldERh
bWFnZVJlY3QudW5pdGVJZk5vblplcm8ocmVwbGljYU9yaWdpblRyYW5zZm9ybS5tYXBSZWN0KGRh
bWFnZVJlY3RJbkxvY2FsU3BhY2UpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGRiNjMxNWM0OTU3NDg4OTFhYjY0MGI5
ZTRiZjJlOWE2OTZmMzE4OTkuLjUxMWY3ZDFhNjI5NmE5NzhkZGU3MmQ3ODExOGE5NmM0NGYwMDgw
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMjQ5
LDYgKzI0OSwyNSBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIC8vICAgICAgICBQIGlz
IHRoZSBwcm9qZWN0aW9uIG1hdHJpeAogICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1
c3RtZW50ICh0byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKICAgICAvLworICAgIC8vIFdo
ZW4gYSByZW5kZXIgc3VyZmFjZSBoYXMgYSByZXBsaWNhIGxheWVyLCB0aGF0IGxheWVyJ3MgdHJh
bnNmb3JtIGlzIHVzZWQgdG8gZHJhdyBhIHNlY29uZCBjb3B5IG9mIHRoZSBzdXJmYWNlLgorICAg
IC8vIFRyYW5zZm9ybXMgbmFtZWQgaGVyZSBhcmUgcmVsYXRpdmUgdG8gdGhlIHN1cmZhY2UsIHVu
bGVzcyB0aGV5IHNwZWNpZnkgdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlIHJlcGxpY2EgbGF5ZXIu
CisgICAgLy8KKyAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugb3JpZ2luIHRyYW5zZm9ybSB0byBp
dHMgdGFyZ2V0IHN1cmZhY2Ugb3JpZ2luIGlzOgorICAgIC8vICAgICAgICBNW3N1cmZhY2VPcmln
aW5dID0gTVtvd25pbmdMYXllci0+RHJhd10gKiBUcltvcmlnaW4yY2VudGVyXS5pbnZlcnNlKCkK
KyAgICAvLworICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBvcmlnaW4gdHJhbnNmb3JtIHRvIGl0
cyB0aGUgcm9vdCAoc2NyZWVuIHNwYWNlKSBvcmlnaW4gaXM6CisgICAgLy8gICAgICAgIE1bc3Vy
ZmFjZTJyb290XSA9IE1bb3duaW5nTGF5ZXItPnNjcmVlbnNwYWNlXQorICAgIC8vCisgICAgLy8g
VGhlIHJlcGxpY2EgZHJhdyB0cmFuc2Zvcm0gaXM6CisgICAgLy8gICAgICAgIE1bcmVwbGljYURy
YXddID0gTVtzdXJmYWNlT3JpZ2luXSAqIFRyW3JlcGxpY2EtPnBvc2l0aW9uKCldICogVHJbcmVw
bGljYV0gKiBUclthbmNob3IyY2VudGVyXQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICA9
IE1bb3duaW5nTGF5ZXItPmRyYXddICogVHJbb3JpZ2luMmNlbnRlcl0uaW52ZXJzZSgpICogVHJb
cmVwbGljYS0+cG9zaXRpb24oKV0gKiBUcltyZXBsaWNhXSAqIFRyW2FuY2hvcjJjbGlwcGVkQ2Vu
dGVyXQorICAgIC8vCisgICAgLy8gVGhlIHJlcGxpY2Egb3JpZ2luIHRyYW5zZm9ybSB0byBpdHMg
dGFyZ2V0IHN1cmZhY2Ugb3JpZ2luIGlzOgorICAgIC8vICAgICAgICBNW3JlcGxpY2FPcmlnaW5d
ID0gTVtzdXJmYWNlT3JpZ2luXSAqIFRyW3JlcGxpY2EtPnBvc2l0aW9uKCldICogVHJbcmVwbGlj
YV0gKiBUcltvcmlnaW4yYW5jaG9yXS5pbnZlcnNlKCkKKyAgICAvLworICAgIC8vIFRoZSByZXBs
aWNhIG9yaWdpbiB0cmFuc2Zvcm0gdG8gdGhlIHJvb3QgKHNjcmVlbiBzcGFjZSkgb3JpZ2luIGlz
OgorICAgIC8vICAgICAgICBNW3JlcGxpY2Eycm9vdF0gPSBNW3N1cmZhY2Uycm9vdF0gKiBUclty
ZXBsaWNhLT5wb3NpdGlvbigpXSAqIFRyW3JlcGxpY2FdICogVHJbb3JpZ2luMmFuY2hvcl0uaW52
ZXJzZSgpCisgICAgLy8KIAogICAgIGlmIChzdWJ0cmVlU2hvdWxkQmVTa2lwcGVkKGxheWVyKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzExLDEyICszMzAsMTIgQEAgc3RhdGljIGJvb2wg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXIKICAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogICAgICAgICBs
YXllci0+c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhmYWxzZSk7CiAKLSAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsK
LSAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53
aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0T3JpZ2luVHJhbnNmb3JtKGxheWVyT3JpZ2luVHJhbnNmb3JtKTsKKyAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZU9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNm
b3JtOworICAgICAgICBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBi
b3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgIHJlbmRl
clN1cmZhY2UtPnNldE9yaWdpblRyYW5zZm9ybShzdXJmYWNlT3JpZ2luVHJhbnNmb3JtKTsKIAog
ICAgICAgICAvLyBVcGRhdGUgdGhlIGFnZ3JlZ2F0ZSBoaWVyYXJjaHkgbWF0cml4IHRvIGluY2x1
ZGUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBSZW5kZXJTdXJmYWNlLgotICAg
ICAgICBuZXh0SGllcmFyY2h5TWF0cml4Lm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtKTsK
KyAgICAgICAgbmV4dEhpZXJhcmNoeU1hdHJpeC5tdWx0aXBseShzdXJmYWNlT3JpZ2luVHJhbnNm
b3JtKTsKIAogICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2UgY2xpcFJlY3QgY29udHJpYnV0
ZXMgdG8gdGhlIHNjaXNzb3IgcmVjdCB0aGF0IG5lZWRzIHRvCiAgICAgICAgIC8vIGJlIGFwcGxp
ZWQgYmVmb3JlIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcK
QEAgLTQ3MywxNCArNDkyLDI5IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAgIGRy
YXdUcmFuc2Zvcm0udHJhbnNsYXRlM2Qoc3VyZmFjZUNlbnRlci54KCkgKyBjZW50ZXJPZmZzZXRE
dWVUb0NsaXBwaW5nLndpZHRoKCksIHN1cmZhY2VDZW50ZXIueSgpICsgY2VudGVyT2Zmc2V0RHVl
VG9DbGlwcGluZy5oZWlnaHQoKSwgMCk7CiAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdU
cmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CiAKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNm
b3JtYXRpb24gbWF0cml4IHVzZWQgdG8gZHJhdyB0aGUgcmVwbGljYSBvZiB0aGUgcmVuZGVyCi0g
ICAgICAgIC8vIHN1cmZhY2UuCisgICAgICAgIC8vIFRoZSBsYXllcidzIG9yaWdpbiBpcyBlcXVh
bCB0byB0aGUgc3VyZmFjZSdzIG9yaWdpbiBzbyB0aGUgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gaXMg
dGhlIHNhbWUuCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNjcmVlblNwYWNlVHJhbnNmb3Jt
KGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKwogICAgICAgICBpZiAobGF5ZXItPnJl
cGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1hdGlv
biBtYXRyaXggdXNlZCB0byBkcmF3IHRoZSBzdXJmYWNlJ3MgcmVwbGljYSB0byB0aGUgdGFyZ2V0
IHN1cmZhY2UuCiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhRHJhd1Ry
YW5zZm9ybSA9IHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOwotICAgICAgICAgICAg
cmVwbGljYURyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5w
b3NpdGlvbigpLngoKSwgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7
CisgICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUobGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlv
bigpLnkoKSk7CiAgICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS5tdWx0aXBseShsYXll
ci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgIHJlcGxpY2FEcmF3
VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgp
ICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgpICog
Ym91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRy
YW5zbGF0ZShzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hvclBvaW50LngoKSAqIGJvdW5kcy53aWR0
aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQo
KSk7CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShy
ZXBsaWNhRHJhd1RyYW5zZm9ybSk7CisKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07CisgICAgICAgICAgICBzdXJm
YWNlT3JpZ2luVG9SZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZShsYXllci0+cmVwbGlj
YUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9u
KCkueSgpKTsKKyAgICAgICAgICAgIHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zv
cm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAg
ICAgICBzdXJmYWNlT3JpZ2luVG9SZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtYW5j
aG9yUG9pbnQueCgpICogYm91bmRzLndpZHRoKCksIC1hbmNob3JQb2ludC55KCkgKiBib3VuZHMu
aGVpZ2h0KCkpOworCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNhJ3MgIm9yaWdp
blRyYW5zZm9ybSIgdGhhdCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmlnaW4gc3BhY2UgdG8g
dGhlIHRhcmdldCBzdXJmYWNlIG9yaWdpbiBzcGFjZS4KKyAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgp
LT5vcmlnaW5UcmFuc2Zvcm0oKSAqIHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zv
cm07CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhT3JpZ2luVHJhbnNmb3Jt
KHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0pOworCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBy
ZXBsaWNhJ3MgInNjcmVlblNwYWNlVHJhbnNmb3JtIiB0aGF0IG1hcHMgZnJvbSB0aGUgcmVwbGlj
YSdzIG9yaWdpbiBzcGFjZSB0byB0aGUgc2NyZWVuJ3Mgb3JpZ2luIHNwYWNlLgorICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSAqIHN1cmZhY2VPcmln
aW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5z
ZXRSZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0ocmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3Jt
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIGEgcmVuZGVyIHN1cmZhY2UgaGFzIG5vIGxh
eWVyIGxpc3QsIHRoZW4gaXQgYW5kIG5vbmUgb2YgaXRzIGNoaWxkcmVuIG5lZWRlZCB0byBnZXQg
ZHJhd24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGViZTA2
ZjUxMGU5NmQ1ZDA3ZDdkNzBmN2U2M2M1OTM2NDVhNjRkNDQuLjVjMjE1OTA5MzhjMjAyODgzODY5
ZWJhZmVhM2RjMTI1MzJiNWUwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCkBAIC0xOTUsMjcgKzE5NSwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRy
YWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsCiAgICAg
fQogfQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcmVlblNwYWNlVHJh
bnNmb3JtRm9yU3VyZmFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyKQotewotICAg
IC8vIFRoZSBsYXllcidzIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0gY2FuIGJlIHdyaXR0ZW4gYXM6
Ci0gICAgLy8gICBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtID0gc3VyZmFjZVNjcmVlblNwYWNl
VHJhbnNmb3JtICogbGF5ZXJPcmlnaW5UcmFuc2Zvcm0KLSAgICAvLyBTbywgdG8gY29tcHV0ZSB0
aGUgc3VyZmFjZSBzY3JlZW4gc3BhY2UsIHdlIGNhbiBkbzoKLSAgICAvLyAgIHN1cmZhY2VTY3Jl
ZW5TcGFjZVRyYW5zZm9ybSA9IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBpbnZlcnNlKGxh
eWVyT3JpZ2luVHJhbnNmb3JtKQotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmln
aW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlTGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBs
YXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUoLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+
Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkuaGVp
Z2h0KCkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5z
Zm9ybSA9IHJlbmRlclN1cmZhY2VMYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBz
dXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJPcmlnaW5UcmFuc2Zvcm0u
aW52ZXJzZSgpKTsKLQotICAgIHJldHVybiBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm07Ci19
Ci0KIHN0YXRpYyBGbG9hdFJlY3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJl
bmRlclN1cmZhY2VMYXllciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKIHsKICAg
ICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7CiAgICAgLy8gRm9yIG5vdywgd2UgY29uc2Vy
dmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBhcyB0aGUgZGFtYWdlIGZvcgogICAgIC8vIGFs
bCBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZlIHRyYW5zZm9ybXMuCi0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBjb21wdXRlU2NyZWVuU3BhY2VUcmFu
c2Zvcm1Gb3JTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7CisgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CiAgICAgaWYgKHNjcmVlblNw
YWNlVHJhbnNmb3JtLmhhc1BlcnNwZWN0aXZlKCkpIHsKICAgICAgICAgLy8gUGVyc3BlY3RpdmUg
cHJvamVjdGlvbnMgZG8gbm90IHBsYXkgbmljZSB3aXRoIG1hcFJlY3Qgb2YKICAgICAgICAgLy8g
aW52ZXJzZSB0cmFuc2Zvcm1zLiBJbiB0aGlzIHVuY29tbW9uIGNhc2UsIGl0cyBzaW1wbGVyIHRv
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDY4M2QxNjZkMGI3ODRkOTgwOTg0MWZm
MjYxYzhlOWE0ZjA1NmJlYWYuLjA1MTM1ODZiODM4ZWJlMjVjNzNlZDE5YWRiMTgyNWUwN2I5MjQw
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC03MCwyNCArNzAsMzMgQEAgcHVi
bGljOgogICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0
eTsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFj
aXR5ID0gb3BhY2l0eTsgfQogCisgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpIHsgbV9maWx0ZXJzID0gZmlsdGVyczsgfQorICAgIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KKyAgICBT
a0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisKKyAgICB2b2lk
IHNldE5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyhDQ1JlbmRlclN1cmZhY2UqIHN1cmZh
Y2UpIHsgbV9uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSBzdXJmYWNlOyB9CisgICAg
Y29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKSBj
b25zdCB7IHJldHVybiBtX25lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVsczsgfQorCiAgICAg
Ym9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0
eUlzQW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGJvb2wg
ZHJhd09wYWNpdHlJc0FuaW1hdGluZykgeyBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcgPSBkcmF3
T3BhY2l0eUlzQW5pbWF0aW5nOyB9CiAKICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0g
ZHJhd1RyYW5zZm9ybTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIHNl
dEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBm
aWx0ZXJzOyB9Ci0gICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsdGVyczsgfQotICAgIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKKyAgICB2b2lkIHNldE9yaWdpblRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKSB7IG1fb3JpZ2luVHJhbnNmb3JtID0gb3Jp
Z2luVHJhbnNmb3JtOyB9CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luVHJhbnNmb3JtOyB9CiAKLSAgICB2b2lk
IHNldE5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyhDQ1JlbmRlclN1cmZhY2UqIHN1cmZh
Y2UpIHsgbV9uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSBzdXJmYWNlOyB9Ci0gICAg
Y29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKSBj
b25zdCB7IHJldHVybiBtX25lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVsczsgfQorICAgIHZv
aWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNj
cmVlblNwYWNlVHJhbnNmb3JtKSB7IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFj
ZVRyYW5zZm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KIAog
ICAgIHZvaWQgc2V0UmVwbGljYURyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHJlcGxpY2FEcmF3VHJhbnNmb3JtKSB7IG1fcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZXBs
aWNhRHJhd1RyYW5zZm9ybTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBs
aWNhRHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYURyYXdUcmFuc2Zvcm07
IH0KIAotICAgIHZvaWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBvcmlnaW5UcmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zv
cm07IH0KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW5UcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FPcmlnaW5U
cmFuc2Zvcm0pIHsgbV9yZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gcmVwbGljYU9yaWdpblRyYW5z
Zm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhT3JpZ2luVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9CisKKyAg
ICB2b2lkIHNldFJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKSB7IG1fcmVwbGljYVNjcmVlblNw
YWNlVHJhbnNmb3JtID0gcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9CisgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9CiAKICAgICB2b2lkIHNl
dENsaXBSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpcFJlY3Q7IH0KQEAgLTEzNiw4ICsxNDUsMTEgQEAgcHJpdmF0
ZToKICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwogICAgIGJvb2wgbV9kcmF3T3BhY2l0eUlzQW5p
bWF0aW5nOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fb3JpZ2luVHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBs
aWNhRHJhd1RyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FPcmln
aW5UcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm07CiAgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgSW50UmVj
dCBtX2NsaXBSZWN0OwogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IG1fbGF5ZXJMaXN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAKaW5kZXggZTYyMDZjYzU4ZjkwMzNiNWZmY2FhNjllZWI0ZDI5MGYzNTFl
ZDNmMy4uZTEyYjI3NTI2Mjk0ODc2ZjQzMzMzZmI4YzI0ZmVkNThjYjhmNDdkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QuY3BwCkBAIC0zMDgsNiArMzA4LDU2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJlbmRlclN1cmZhY2UpCiAgICAgRVhQ
RUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNo
aWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKICAgICBFWFBF
Q1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hp
bGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpKTsKIAorICAgIC8vIFRo
ZSBzY3JlZW4gc3BhY2UgaXMgdGhlIHNhbWUgYXMgdGhlIHRhcmdldCBzaW5jZSB0aGUgY2hpbGQg
c3VyZmFjZSBkcmF3cyBpbnRvIHRoZSByb290LgorICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVwbGljYSkKK3sKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkUmVwbGljYSA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3Jh
bmRDaGlsZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisgICAgY2hp
bGQtPnNldFJlcGxpY2FMYXllcihjaGlsZFJlcGxpY2EuZ2V0KCkpOworCisgICAgLy8gQ2hpbGQg
aXMgc2V0IHVwIHNvIHRoYXQgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIGJlIGNyZWF0ZWQu
CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRMYXllclRy
YW5zZm9ybTsKKyAgICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjAp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3I7Cisg
ICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUoMi41LCAzLjApOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFN1YmxheWVyTWF0cml4OworICAgIHBhcmVudFN1Ymxh
eWVyTWF0cml4LnNjYWxlM2QoMTAuMCwgMTAuMCwgMy4zKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9D
ZW50ZXIudHJhbnNsYXRlKDUuMCwgNi4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gPSBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50
TGF5ZXJUcmFuc2Zvcm0gKiBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKQorICAg
ICAgICAgICAgKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyICogcGFyZW50U3VibGF5ZXJNYXRy
aXggKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLmludmVyc2UoKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgY2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLnRyYW5zbGF0ZSg4LjAsIDkuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cmVwbGljYUxheWVyVHJhbnNmb3JtOworICAgIHJlcGxpY2FMYXllclRyYW5zZm9ybS5zY2FsZTNk
KDMuMCwgMy4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FDb21wb3Np
dGVUcmFuc2Zvcm0gPSBwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiByZXBsaWNhTGF5ZXJUcmFu
c2Zvcm07CisKKyAgICAvLyBDaGlsZCdzIHJlbmRlciBzdXJmYWNlIHNob3VsZCBub3QgZXhpc3Qg
eWV0LgorICAgIEFTU0VSVF9GQUxTRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5z
Zm9ybSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxv
YXRQb2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgtMC41ZiwgLTAuNWYpLCBJbnRTaXplKDEs
IDEpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZFJlcGxp
Y2EuZ2V0KCksIHJlcGxpY2FMYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZh
bHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBh
cmVudC5nZXQoKSk7CisKKyAgICAvLyBSZW5kZXIgc3VyZmFjZSBzaG91bGQgaGF2ZSBiZWVuIGNy
ZWF0ZWQgbm93LgorICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IEFTU0VSVF9FUShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocmVwbGljYUNv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+cmVwbGljYU9y
aWdpblRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHJl
cGxpY2FDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPnJl
cGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKIH0KIAogVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKQEAg
LTMxNSw2ICszNjUsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRy
YW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIC8vIFRoaXMgdGVzdCBjcmVh
dGVzIGEgbW9yZSBjb21wbGV4IHRyZWUgYW5kIHZlcmlmaWVzIGl0IGFsbCBhdCBvbmNlLiBUaGlz
IGNvdmVycyB0aGUgZm9sbG93aW5nIGNhc2VzOgogICAgIC8vICAgLSBsYXllcnMgdGhhdCBhcmUg
ZGVzY3JpYmVkIHcuci50LiBhIHJlbmRlciBzdXJmYWNlOiBzaG91bGQgaGF2ZSBkcmF3IHRyYW5z
Zm9ybXMgZGVzY3JpYmVkIHcuci50LiB0aGF0IHN1cmZhY2UKICAgICAvLyAgIC0gQSByZW5kZXIg
c3VyZmFjZSBkZXNjcmliZWQgdy5yLnQuIGFuIGFuY2VzdG9yIHJlbmRlciBzdXJmYWNlOiBzaG91
bGQgaGF2ZSBhIGRyYXcgdHJhbnNmb3JtIGRlc2NyaWJlZCB3LnIudC4gdGhhdCBhbmNlc3RvciBz
dXJmYWNlCisgICAgLy8gICAtIFJlcGxpY2FzIG9mIGEgcmVuZGVyIHN1cmZhY2UgYXJlIGRlc2Ny
aWJlZCB3LnIudC4gdGhlIHJlcGxpY2EncyB0cmFuc2Zvcm0gYXJvdW5kIGl0cyBhbmNob3IsIGFs
b25nIHdpdGggdGhlIHN1cmZhY2UgaXRzZWxmLgogICAgIC8vICAgLSBTYW5pdHkgY2hlY2sgb24g
cmVjdXJzaW9uOiB2ZXJpZnkgdHJhbnNmb3JtcyBvZiBsYXllcnMgZGVzY3JpYmVkIHcuci50LiBh
IHJlbmRlciBzdXJmYWNlIHRoYXQgaXMgZGVzY3JpYmVkIHcuci50LiBhbiBhbmNlc3RvciByZW5k
ZXIgc3VyZmFjZS4KICAgICAvLyAgIC0gdmVyaWZ5aW5nIHRoYXQgZWFjaCBsYXllciBoYXMgYSBy
ZWZlcmVuY2UgdG8gdGhlIGNvcnJlY3QgcmVuZGVyU3VyZmFjZSBhbmQgdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSB2YWx1ZXMuCiAKQEAgLTMyNCw2ICszNzUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZE9mUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZE9mUlMxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkT2ZSUzIgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVwbGljYU9m
UlMxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHJlcGxpY2FPZlJTMiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBncmFuZENoaWxkT2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBncmFuZENoaWxk
T2ZSUzEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBncmFu
ZENoaWxkT2ZSUzIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQoKSk7CkBAIC0zMzYsNiArMzg5LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBjaGls
ZE9mUm9vdC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZE9mUm9vdCk7CiAgICAgY2hpbGRPZlJTMS0+YWRk
Q2hpbGQoZ3JhbmRDaGlsZE9mUlMxKTsKICAgICBjaGlsZE9mUlMyLT5hZGRDaGlsZChncmFuZENo
aWxkT2ZSUzIpOworICAgIHJlbmRlclN1cmZhY2UxLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYU9m
UlMxLmdldCgpKTsKKyAgICByZW5kZXJTdXJmYWNlMi0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2FP
ZlJTMi5nZXQoKSk7CiAKICAgICAvLyBJbiBjb21iaW5hdGlvbiB3aXRoIGRlc2NlbmRhbnREcmF3
c0NvbnRlbnQsIG9wYWNpdHkgIT0gMSBmb3JjZXMgdGhlIGxheWVyIHRvIGhhdmUgYSBuZXcgcmVu
ZGVyU3VyZmFjZS4KICAgICByZW5kZXJTdXJmYWNlMS0+c2V0T3BhY2l0eSgwLjVmKTsKQEAgLTM0
NCw2ICszOTksNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5z
Zm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIC8vIEFsbCBsYXllcnMgaW4gdGhl
IHRyZWUgYXJlIGluaXRpYWxpemVkIHdpdGggYW4gYW5jaG9yIGF0IDIuNSBhbmQgYSBzaXplIG9m
ICgxMCwxMCkuCiAgICAgLy8gbWF0cml4ICJBIiBpcyB0aGUgY29tcG9zaXRlIGxheWVyIHRyYW5z
Zm9ybSB1c2VkIGluIGFsbCBsYXllcnMsIGNlbnRlcmVkIGFib3V0IHRoZSBhbmNob3IgcG9pbnQK
ICAgICAvLyBtYXRyaXggIkIiIGlzIHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gdXNlZCBpbiBhbGwg
bGF5ZXJzLCBjZW50ZXJlZCBhYm91dCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBsYXllci4K
KyAgICAvLyBtYXRyaXggIlIiIGlzIHRoZSBjb21wb3NpdGUgcmVwbGljYSB0cmFuc2Zvcm0gdXNl
ZCBpbiBhbGwgcmVwbGljYSBsYXllcnMuCiAgICAgLy8KICAgICAvLyB4IGNvbXBvbmVudCB0ZXN0
cyB0aGF0IGxheWVyVHJhbnNmb3JtIGFuZCBzdWJsYXllclRyYW5zZm9ybSBhcmUgZG9uZSBpbiB0
aGUgcmlnaHQgb3JkZXIgKHRyYW5zbGF0aW9uIGFuZCBzY2FsZSBhcmUgbm9uY29tbXV0YXRpdmUp
LgogICAgIC8vIHkgY29tcG9uZW50IGhhcyBhIHRyYW5zbGF0aW9uIGJ5IDEuMCBmb3IgZXZlcnkg
YW5jZXN0b3IsIHdoaWNoIGluZGljYXRlcyB0aGUgImRlcHRoIiBvZiB0aGUgbGF5ZXIgaW4gdGhl
IGhpZXJhcmNoeS4KQEAgLTM1NSw5ICs0MTEsMTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBs
YXllclRyYW5zZm9ybS50cmFuc2xhdGUoMS4wLCAxLjApOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHN1YmxheWVyVHJhbnNmb3JtOwogICAgIHN1YmxheWVyVHJhbnNmb3JtLnNjYWxlM2QoMTAu
MCwgMS4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FMYXllclRyYW5z
Zm9ybTsKKyAgICByZXBsaWNhTGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgtMi4wLCA1LjAsIDEuMCk7
CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBBID0gdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxh
eWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggQiA9IHRyYW5zbGF0aW9uVG9DZW50ZXIgKiBzdWJsYXllclRyYW5zZm9y
bSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IFIgPSBBICogdHJhbnNsYXRpb25Ub0FuY2hvciAqIHJlcGxpY2FMYXllclRyYW5zZm9ybSAq
IHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9y
bSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNp
emUoMTAsIDEwKSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocmVu
ZGVyU3VyZmFjZTEuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxv
YXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAs
IDEwKSwgZmFsc2UpOwpAQCAtMzY4LDYgKzQyNyw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkT2ZSb290LmdldCgpLCBsYXll
clRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBG
bG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGRPZlJTMS5nZXQoKSwgbGF5ZXJUcmFu
c2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQ
b2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkT2ZSUzIuZ2V0KCksIGxheWVyVHJhbnNmb3Jt
LCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQo
Mi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocmVwbGljYU9mUlMxLmdldCgpLCByZXBsaWNhTGF5ZXJUcmFuc2Zvcm0s
IHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KCksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiks
IEludFNpemUoKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocmVw
bGljYU9mUlMyLmdldCgpLCByZXBsaWNhTGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3Jt
LCBGbG9hdFBvaW50KCksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoKSwgZmFsc2Up
OwogCiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJl
bnQuZ2V0KCkpOwogCkBAIC00MzMsOCArNDk0LDE0IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAg
Ly8KICAgICAvLyBPcmlnaW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDEgaXMgZGVzY3Jp
YmVkIHdpdGggcmVzcGVjdCB0byByb290LgogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5U
cmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAq
IFIsIHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPnJlcGxpY2FPcmlnaW5UcmFuc2Zv
cm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShBICogQiAqIEEsIHJl
bmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBSLCByZW5kZXJTdXJm
YWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CiAg
ICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBvZiByZW5kZXIgc3VyZmFjZSAyIGlzIGRlc2NyaWJlZCB3
aXRoIHJlc3BlY3QgdG8gcmVuZGVyIHN1cmZhY2UgMi4KICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJ
T05fTUFUUklYX0VRKEIgKiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmln
aW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICog
UiwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKS0+cmVwbGljYU9yaWdpblRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIg
KiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSAqIEIg
KiBSLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5yZXBsaWNhU2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CiAKICAgICAvLyBTYW5pdHkgY2hlY2suIElmIHRoZXNlIGZhaWwgdGhlcmUg
aXMgcHJvYmFibHkgYSBidWcgaW4gdGhlIHRlc3QgaXRzZWxmLgogICAgIC8vIEl0IGlzIGV4cGVj
dGVkIHRoYXQgd2UgY29ycmVjdGx5IHNldCB1cCB0cmFuc2Zvcm1zIHNvIHRoYXQgdGhlIHktY29t
cG9uZW50IG9mIHRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132957</attachid>
            <date>2012-03-20 20:45:51 -0700</date>
            <delta_ts>2012-03-20 22:03:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81296-20120320234550.patch</filename>
            <type>text/plain</type>
            <size>29876</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg2ZWFlYjI3MjI5ODBj
YmE5M2RiYjgyZjA2ZTFhYzA1YTU3ODZhMS4uNTdkODliMjFlOWVmN2E5MTA2ZWYwZWIwZWY0Zjdl
NmQyYTQyMzVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAzLTE1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU3Rv
cmUgb3JpZ2luL3NjcmVlbiBzcGFjZSB0cmFuc2Zvcm1zIGZvciBzdXJmYWNlIGFuZCByZXBsaWNh
IGluIHRoZSBzdXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MTI5NgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKwor
ICAgICAgICBDb21wdXRlIGFuZCBzYXZlIGEgbnVtYmVyIG9mIHRyYW5zZm9ybXMgZm9yIHJlbmRl
ciBzdXJmYWNlcy4gVGhlIG9yaWdpbgorICAgICAgICB0cmFuZm9ybSBmb3IgdGhlIHJlcGxpY2Eg
aW50byBpdHMgdGFyZ2V0IHN1cmZhY2UuIFRoZSBvcmlnaW4gdHJhbnNmb3JtCisgICAgICAgIGZv
ciB0aGUgcmVwbGljYSBpbnRvIHRoZSBzY3JlZW4uIEFuZCB0aGUgb3JpZ2luIHRyYW5zZm9ybSBm
b3IgdGhlIHN1cmZhY2UKKyAgICAgICAgaW50byB0aGUgc2NyZWVuLgorCisgICAgICAgIFRoZXNl
IHRyYW5zZm9ybXMgd2lsbCBhbGxvdyB1cyB0byBkZXRlY3Qgb2NjbHVzaW9uIG9mIHJlbmRlciBz
dXJmYWNlcywKKyAgICAgICAgYWxsb3dpbmcgdXMgdG8gY3VsbCAob3IgcGFydGlhbGx5LWN1bGwp
IHRoZSByZW5kZXIgc3VyZmFjZSBxdWFkIGR1cmluZworICAgICAgICBkcmF3aW5nLgorCisgICAg
ICAgIFRoaXMgYWxzbyBmaXhlcyBhIHN1YnRsZSBidWcgaW4gdGhlIHRyYW5zZm9ybXMgdXNlZCBi
eSB0aGUgZGFtYWdlCisgICAgICAgIHRyYWNraW5nIGNvZGUuCisKKyAgICAgICAgVW5pdCB0ZXN0
OiBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5k
ZXJTdXJmYWNlCisgICAgICAgICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52
ZXJpZnlUcmFuc2Zvcm1zRm9yUmVwbGljYQorICAgICAgICAgICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QudmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY3JlZW5T
cGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFJlbmRlclN1cmZhY2VDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnJlcGxpY2FPcmln
aW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpz
ZXRSZXBsaWNhT3JpZ2luVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6c2V0UmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3Jt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NEYW1hZ2VUcmFja2VyOjpleHRlbmREYW1hZ2VG
b3JSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZGFtYWdlSW5TdXJmYWNlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXREcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVu
ZGVyU3VyZmFjZTo6ZHJhd1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVu
ZGVyU3VyZmFjZTo6c2NyZWVuU3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAoQ0NSZW5kZXJTdXJm
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0UmVwbGljYURyYXdU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpyZXBsaWNhRHJh
d1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldFJlcGxp
Y2FPcmlnaW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpy
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2V0UmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVuZGVyU3VyZmFjZTo6cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKToKKwogMjAxMi0wMy0y
MCAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBPcGVuIHJlc291cmNlIGRpYWxvZyBzY3JpcHRzIGxpc3Qgc2hvdWxkIGJlIHNv
cnRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjI1MzFjNzI3MWZjOTIzNWZiOTFl
Y2YzZTk3ZDI5ZTIxNzI2ZGI3Ni4uOTBhYTUxNjdjZGRiYThhOTFiN2Y3MzA2NTU5Nzg3MmI3Mzg2
YmIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0w
My0xNSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIFN0b3JlIG9yaWdpbi9zY3JlZW4gc3BhY2UgdHJhbnNmb3JtcyBmb3Igc3VyZmFjZSBh
bmQgcmVwbGljYSBpbiB0aGUgc3VyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODEyOTYKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBX
YWxrZXIuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTAzLTIwICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVXNlIG9wYXF1ZSBjb250
ZW50cyBmb3IgcGFpbnQgY3VsbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApp
bmRleCAwM2NiYmQ3NjUyM2JhMWQzNjYxZjE5Y2ZkZTdiMzcyZjY0MzFkNTI3Li41OWU1ZDk2MWRj
ODFkNzBiNjY4OTgzNjIzMmNmOWE5Y2Q0MzY4N2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaApAQCAtNzQsOSArNzQsMTggQEAgcHVibGljOgogICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRy
YW5zZm9ybTsgfQogICAgIHZvaWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5U
cmFuc2Zvcm07IH0KIAorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KKyAg
ICB2b2lkIHNldFNjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSkgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3JtID0gc2NyZWVu
U3BhY2VUcmFuc2Zvcm07IH0KKwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBs
aWNhRHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYURyYXdUcmFuc2Zvcm07
IH0KICAgICB2b2lkIHNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9ybSkgeyBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtID0g
cmVwbGljYURyYXdUcmFuc2Zvcm07IH0KIAorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiByZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhT3JpZ2lu
VHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRSZXBsaWNhT3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhT3JpZ2luVHJhbnNmb3JtKSB7IG1fcmVwbGljYU9y
aWdpblRyYW5zZm9ybSA9IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm07IH0KKworICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3JlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0UmVw
bGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBs
aWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0pIHsgbV9yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0g
PSByZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KKwogICAgIGJvb2wgdGFyZ2V0U3VyZmFj
ZVRyYW5zZm9ybXNBcmVBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2VU
cmFuc2Zvcm1zQXJlQW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXRUYXJnZXRTdXJmYWNlVHJhbnNm
b3Jtc0FyZUFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX3RhcmdldFN1cmZhY2VUcmFuc2Zv
cm1zQXJlQW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9CiAgICAgYm9vbCBzY3JlZW5TcGFjZVRyYW5z
Zm9ybXNBcmVBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblNwYWNlVHJhbnNmb3Jt
c0FyZUFuaW1hdGluZzsgfQpAQCAtMTA5LDggKzExOCwxMSBAQCBwcml2YXRlOgogICAgIGZsb2F0
IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9vcmlnaW5UcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zY3JlZW5TcGFj
ZVRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNm
b3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmVwbGljYU9yaWdpblRyYW5zZm9ybTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybTsK
ICAgICBib29sIG1fdGFyZ2V0U3VyZmFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7CiAgICAgYm9v
bCBtX3NjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsKICAgICBGaWx0ZXJPcGVyYXRp
b25zIG1fZmlsdGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCmluZGV4IDZhMDYy
Y2FjYTdjYzU4NzVmMmM5MjU5OTg1NmI2YTVlYzhlNTNjNzkuLjk2YzVhNWUxODI1Y2ZmZjQ5YmY5
M2NjODYxNzcyZWFmOGY3ZTczMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcApA
QCAtMjg2LDEyICsyODYsNyBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9y
UmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdAogICAgICAgICB0YXJn
ZXREYW1hZ2VSZWN0LnVuaXRlSWZOb25aZXJvKGRhbWFnZVJlY3RJblRhcmdldFNwYWNlKTsKIAog
ICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICAvLyBDb21w
dXRlIHRoZSByZXBsaWNhJ3MgIm9yaWdpblRyYW5zZm9ybSIgdGhhdCBtYXBzIGZyb20gdGhlIHJl
cGxpY2EncyBvcmlnaW4gc3BhY2UgdG8gdGhlIHRhcmdldCBzdXJmYWNlIG9yaWdpbiBzcGFjZS4K
LSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0g
PSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKTsKLSAgICAgICAgICAg
IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOwot
ICAgICAgICAgICAgcmVwbGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGlj
YUxheWVyKCktPnRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgIHJlcGxpY2FPcmlnaW5UcmFuc2Zv
cm0udHJhbnNsYXRlKC1sYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCAtbGF5
ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSk7Ci0KKyAgICAgICAgICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gcmVuZGVyU3Vy
ZmFjZS0+cmVwbGljYU9yaWdpblRyYW5zZm9ybSgpOwogICAgICAgICAgICAgdGFyZ2V0RGFtYWdl
UmVjdC51bml0ZUlmTm9uWmVybyhyZXBsaWNhT3JpZ2luVHJhbnNmb3JtLm1hcFJlY3QoZGFtYWdl
UmVjdEluTG9jYWxTcGFjZSkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggOTEyNGIwNzY1OTAxMzFmZjhjNmFmNDgxNGYy
MTZmMTdkMTI0NzZjOC4uYmQyMjE1NGI5MThhN2RlNjI4YzNjOTg0NjFlMDY3MmQ0ODFmYmYyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0yNjQsNiAr
MjY0LDI1IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgLy8gICAgICAgIFAgaXMgdGhl
IHByb2plY3Rpb24gbWF0cml4CiAgICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1l
bnQgKHRvIHNjYWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQogICAgIC8vCisgICAgLy8gV2hlbiBh
IHJlbmRlciBzdXJmYWNlIGhhcyBhIHJlcGxpY2EgbGF5ZXIsIHRoYXQgbGF5ZXIncyB0cmFuc2Zv
cm0gaXMgdXNlZCB0byBkcmF3IGEgc2Vjb25kIGNvcHkgb2YgdGhlIHN1cmZhY2UuCisgICAgLy8g
VHJhbnNmb3JtcyBuYW1lZCBoZXJlIGFyZSByZWxhdGl2ZSB0byB0aGUgc3VyZmFjZSwgdW5sZXNz
IHRoZXkgc3BlY2lmeSB0aGV5IGFyZSByZWxhdGl2ZSB0byB0aGUgcmVwbGljYSBsYXllci4KKyAg
ICAvLworICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBvcmlnaW4gdHJhbnNmb3JtIHRvIGl0cyB0
YXJnZXQgc3VyZmFjZSBvcmlnaW4gaXM6CisgICAgLy8gICAgICAgIE1bc3VyZmFjZU9yaWdpbl0g
PSBNW293bmluZ0xheWVyLT5EcmF3XSAqIFRyW29yaWdpbjJjZW50ZXJdLmludmVyc2UoKQorICAg
IC8vCisgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIG9yaWdpbiB0cmFuc2Zvcm0gdG8gaXRzIHRo
ZSByb290IChzY3JlZW4gc3BhY2UpIG9yaWdpbiBpczoKKyAgICAvLyAgICAgICAgTVtzdXJmYWNl
MnJvb3RdID0gTVtvd25pbmdMYXllci0+c2NyZWVuc3BhY2VdCisgICAgLy8KKyAgICAvLyBUaGUg
cmVwbGljYSBkcmF3IHRyYW5zZm9ybSBpczoKKyAgICAvLyAgICAgICAgTVtyZXBsaWNhRHJhd10g
PSBNW3N1cmZhY2VPcmlnaW5dICogVHJbcmVwbGljYS0+cG9zaXRpb24oKV0gKiBUcltyZXBsaWNh
XSAqIFRyW2FuY2hvcjJjZW50ZXJdCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgID0gTVtv
d25pbmdMYXllci0+ZHJhd10gKiBUcltvcmlnaW4yY2VudGVyXS5pbnZlcnNlKCkgKiBUcltyZXBs
aWNhLT5wb3NpdGlvbigpXSAqIFRyW3JlcGxpY2FdICogVHJbYW5jaG9yMmNsaXBwZWRDZW50ZXJd
CisgICAgLy8KKyAgICAvLyBUaGUgcmVwbGljYSBvcmlnaW4gdHJhbnNmb3JtIHRvIGl0cyB0YXJn
ZXQgc3VyZmFjZSBvcmlnaW4gaXM6CisgICAgLy8gICAgICAgIE1bcmVwbGljYU9yaWdpbl0gPSBN
W3N1cmZhY2VPcmlnaW5dICogVHJbcmVwbGljYS0+cG9zaXRpb24oKV0gKiBUcltyZXBsaWNhXSAq
IFRyW29yaWdpbjJhbmNob3JdLmludmVyc2UoKQorICAgIC8vCisgICAgLy8gVGhlIHJlcGxpY2Eg
b3JpZ2luIHRyYW5zZm9ybSB0byB0aGUgcm9vdCAoc2NyZWVuIHNwYWNlKSBvcmlnaW4gaXM6Cisg
ICAgLy8gICAgICAgIE1bcmVwbGljYTJyb290XSA9IE1bc3VyZmFjZTJyb290XSAqIFRyW3JlcGxp
Y2EtPnBvc2l0aW9uKCldICogVHJbcmVwbGljYV0gKiBUcltvcmlnaW4yYW5jaG9yXS5pbnZlcnNl
KCkKKyAgICAvLwogCiAgICAgaWYgKHN1YnRyZWVTaG91bGRCZVNraXBwZWQobGF5ZXIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMzMsOSArMzUyLDkgQEAgc3RhdGljIGJvb2wgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXIKICAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogICAgICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHlJc0FuaW1hdGluZyhmYWxzZSk7CiAKLSAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKLSAgICAg
ICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0aCgp
LCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0
T3JpZ2luVHJhbnNmb3JtKGxheWVyT3JpZ2luVHJhbnNmb3JtKTsKKyAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggc3VyZmFjZU9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOwor
ICAgICAgICBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMu
d2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgIHJlbmRlclN1cmZh
Y2UtPnNldE9yaWdpblRyYW5zZm9ybShzdXJmYWNlT3JpZ2luVHJhbnNmb3JtKTsKIAogICAgICAg
ICByZW5kZXJTdXJmYWNlLT5zZXRUYXJnZXRTdXJmYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZyhs
YXllcklzSW5BbmltYXRpbmdTdWJ0cmVlRm9yU3VyZmFjZSk7CiAgICAgICAgIHJlbmRlclN1cmZh
Y2UtPnNldFNjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZyhsYXllcklzSW5BbmltYXRp
bmdTdWJ0cmVlRm9yU2NyZWVuKTsKQEAgLTM0NCw3ICszNjMsNyBAQCBzdGF0aWMgYm9vbCBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVy
LCBMYXllcgogICAgICAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0FuaW1hdGlu
ZyhsYXllcklzSW5BbmltYXRpbmdTdWJ0cmVlRm9yU2NyZWVuKTsKIAogICAgICAgICAvLyBVcGRh
dGUgdGhlIGFnZ3JlZ2F0ZSBoaWVyYXJjaHkgbWF0cml4IHRvIGluY2x1ZGUgdGhlIHRyYW5zZm9y
bSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBSZW5kZXJTdXJmYWNlLgotICAgICAgICBuZXh0SGllcmFy
Y2h5TWF0cml4Lm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtKTsKKyAgICAgICAgbmV4dEhp
ZXJhcmNoeU1hdHJpeC5tdWx0aXBseShzdXJmYWNlT3JpZ2luVHJhbnNmb3JtKTsKIAogICAgICAg
ICAvLyBUaGUgcmVuZGVyIHN1cmZhY2UgY2xpcFJlY3QgY29udHJpYnV0ZXMgdG8gdGhlIHNjaXNz
b3IgcmVjdCB0aGF0IG5lZWRzIHRvCiAgICAgICAgIC8vIGJlIGFwcGxpZWQgYmVmb3JlIGRyYXdp
bmcgdGhlIHJlbmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcKQEAgLTUwMywxNCArNTIy
LDI5IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUlu
dGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJh
bnNsYXRlM2Qoc3VyZmFjZUNlbnRlci54KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLndp
ZHRoKCksIHN1cmZhY2VDZW50ZXIueSgpICsgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZy5oZWln
aHQoKSwgMCk7CiAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdUcmFuc2Zvcm0oZHJhd1Ry
YW5zZm9ybSk7CiAKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4
IHVzZWQgdG8gZHJhdyB0aGUgcmVwbGljYSBvZiB0aGUgcmVuZGVyCi0gICAgICAgIC8vIHN1cmZh
Y2UuCisgICAgICAgIC8vIFRoZSBsYXllcidzIG9yaWdpbiBpcyBlcXVhbCB0byB0aGUgc3VyZmFj
ZSdzIG9yaWdpbiBzbyB0aGUgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gaXMgdGhlIHNhbWUuCisgICAg
ICAgIHJlbmRlclN1cmZhY2UtPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKGxheWVyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKKwogICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7
CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNlZCB0
byBkcmF3IHRoZSBzdXJmYWNlJ3MgcmVwbGljYSB0byB0aGUgdGFyZ2V0IHN1cmZhY2UuCiAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhRHJhd1RyYW5zZm9ybSA9IHJlbmRl
clN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOwotICAgICAgICAgICAgcmVwbGljYURyYXdUcmFu
c2Zvcm0udHJhbnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwg
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisgICAgICAgICAgICBy
ZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3Np
dGlvbigpLngoKSwgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSk7CiAgICAg
ICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVy
KCktPnRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5z
bGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRo
KCksIHN1cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgp
LCAwKTsKKyAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZShzdXJmYWNl
Q2VudGVyLngoKSAtIGFuY2hvclBvaW50LngoKSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2Vu
dGVyLnkoKSAtIGFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSk7CiAgICAgICAgICAg
ICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShyZXBsaWNhRHJhd1RyYW5z
Zm9ybSk7CisKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VPcmlnaW5U
b1JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07CisgICAgICAgICAgICBzdXJmYWNlT3JpZ2luVG9SZXBs
aWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZShsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0
aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpKTsKKyAgICAg
ICAgICAgIHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zvcm0ubXVsdGlwbHkobGF5
ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdXJmYWNlT3Jp
Z2luVG9SZXBsaWNhT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZSgtYW5jaG9yUG9pbnQueCgpICog
Ym91bmRzLndpZHRoKCksIC1hbmNob3JQb2ludC55KCkgKiBib3VuZHMuaGVpZ2h0KCkpOworCisg
ICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNhJ3MgIm9yaWdpblRyYW5zZm9ybSIgdGhh
dCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmlnaW4gc3BhY2UgdG8gdGhlIHRhcmdldCBzdXJm
YWNlIG9yaWdpbiBzcGFjZS4KKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxp
Y2FPcmlnaW5UcmFuc2Zvcm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zv
cm0oKSAqIHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07CisgICAgICAgICAg
ICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhT3JpZ2luVHJhbnNmb3JtKHJlcGxpY2FPcmlnaW5U
cmFuc2Zvcm0pOworCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNhJ3MgInNjcmVl
blNwYWNlVHJhbnNmb3JtIiB0aGF0IG1hcHMgZnJvbSB0aGUgcmVwbGljYSdzIG9yaWdpbiBzcGFj
ZSB0byB0aGUgc2NyZWVuJ3Mgb3JpZ2luIHNwYWNlLgorICAgICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSAqIHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmln
aW5UcmFuc2Zvcm07CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhU2NyZWVu
U3BhY2VUcmFuc2Zvcm0ocmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIElmIGEgcmVuZGVyIHN1cmZhY2UgaGFzIG5vIGxheWVyIGxpc3QsIHRoZW4g
aXQgYW5kIG5vbmUgb2YgaXRzIGNoaWxkcmVuIG5lZWRlZCB0byBnZXQgZHJhd24uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGFkODkyZjI4ZjQ1ZmM3YjlkNDJi
MDY0NmQ5ODRiOGZjNDYxNTk2NmUuLjFlMDBiOWZmODk5ZjgxNWZlNTllY2U5YjE4MDZhNWE3YTM1
NjExMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0yMDAs
MjcgKzIwMCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnRyYWNrRGFtYWdlRm9yQWxs
U3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsCiAgICAgfQogfQogCi1zdGF0aWMg
VHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcmVlblNwYWNlVHJhbnNmb3JtRm9yU3VyZmFj
ZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyKQotewotICAgIC8vIFRoZSBsYXllcidz
IHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0gY2FuIGJlIHdyaXR0ZW4gYXM6Ci0gICAgLy8gICBsYXll
clNjcmVlblNwYWNlVHJhbnNmb3JtID0gc3VyZmFjZVNjcmVlblNwYWNlVHJhbnNmb3JtICogbGF5
ZXJPcmlnaW5UcmFuc2Zvcm0KLSAgICAvLyBTbywgdG8gY29tcHV0ZSB0aGUgc3VyZmFjZSBzY3Jl
ZW4gc3BhY2UsIHdlIGNhbiBkbzoKLSAgICAvLyAgIHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9y
bSA9IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gKiBpbnZlcnNlKGxheWVyT3JpZ2luVHJhbnNm
b3JtKQotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBsYXllck9yaWdpblRyYW5z
Zm9ybS50cmFuc2xhdGUoLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkud2lkdGgo
KSwgLTAuNSAqIHJlbmRlclN1cmZhY2VMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlbmRlclN1
cmZhY2VMYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICBzdXJmYWNlU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLQot
ICAgIHJldHVybiBzdXJmYWNlU2NyZWVuU3BhY2VUcmFuc2Zvcm07Ci19Ci0KIHN0YXRpYyBGbG9h
dFJlY3QgZGFtYWdlSW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXll
ciwgY29uc3QgRmxvYXRSZWN0JiByb290RGFtYWdlUmVjdCkKIHsKICAgICBGbG9hdFJlY3Qgc3Vy
ZmFjZURhbWFnZVJlY3Q7CiAgICAgLy8gRm9yIG5vdywgd2UgY29uc2VydmF0aXZlbHkgdXNlIHRo
ZSByb290IGRhbWFnZSBhcyB0aGUgZGFtYWdlIGZvcgogICAgIC8vIGFsbCBzdXJmYWNlcywgZXhj
ZXB0IHBlcnNwZWN0aXZlIHRyYW5zZm9ybXMuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSBjb21wdXRlU2NyZWVuU3BhY2VUcmFuc2Zvcm1Gb3JTdXJmYWNl
KHJlbmRlclN1cmZhY2VMYXllcik7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNj
cmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCkt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CiAgICAgaWYgKHNjcmVlblNwYWNlVHJhbnNmb3JtLmhh
c1BlcnNwZWN0aXZlKCkpIHsKICAgICAgICAgLy8gUGVyc3BlY3RpdmUgcHJvamVjdGlvbnMgZG8g
bm90IHBsYXkgbmljZSB3aXRoIG1hcFJlY3Qgb2YKICAgICAgICAgLy8gaW52ZXJzZSB0cmFuc2Zv
cm1zLiBJbiB0aGlzIHVuY29tbW9uIGNhc2UsIGl0cyBzaW1wbGVyIHRvCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCmluZGV4IDYyZjE0MGExODg0NjJiNWM3MmJlYjdiMjVlZjA1MzM4N2M1MzYz
ZTQuLmYyNmJkNGUzMjdjZDFlYmIxMWViNTlkYTJhMzU3YWI4OGMyYWUzNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCkBAIC03MCwyNCArNzAsMzMgQEAgcHVibGljOgogICAgIGZsb2F0
IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogICAgIHZvaWQg
c2V0RHJhd09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsg
fQogCisgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMp
IHsgbV9maWx0ZXJzID0gZmlsdGVyczsgfQorICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KKyAgICBTa0JpdG1hcCBhcHBseUZp
bHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisKKyAgICB2b2lkIHNldE5lYXJlc3RBbmNl
c3RvclRoYXRNb3Zlc1BpeGVscyhDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV9uZWFyZXN0
QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSBzdXJmYWNlOyB9CisgICAgY29uc3QgQ0NSZW5kZXJT
dXJmYWNlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBt
X25lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVsczsgfQorCiAgICAgYm9vbCBkcmF3T3BhY2l0
eUlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nOyB9
CiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGJvb2wgZHJhd09wYWNpdHlJc0Fu
aW1hdGluZykgeyBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmcgPSBkcmF3T3BhY2l0eUlzQW5pbWF0
aW5nOyB9CiAKICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdUcmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybTsg
fQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIHNldEZpbHRlcnMoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBmaWx0ZXJzOyB9Ci0gICAg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVy
czsgfQotICAgIFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
KyAgICB2b2lkIHNldE9yaWdpblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
b3JpZ2luVHJhbnNmb3JtKSB7IG1fb3JpZ2luVHJhbnNmb3JtID0gb3JpZ2luVHJhbnNmb3JtOyB9
CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luVHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIHNldE5lYXJlc3RBbmNl
c3RvclRoYXRNb3Zlc1BpeGVscyhDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV9uZWFyZXN0
QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSBzdXJmYWNlOyB9Ci0gICAgY29uc3QgQ0NSZW5kZXJT
dXJmYWNlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBt
X25lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVsczsgfQorICAgIHZvaWQgc2V0U2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNm
b3JtKSB7IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07IH0KIAogICAgIHZvaWQgc2V0UmVw
bGljYURyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FEcmF3
VHJhbnNmb3JtKSB7IG1fcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZXBsaWNhRHJhd1RyYW5zZm9y
bTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYURyYXdUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQg
c2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFu
c2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KLSAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW5UcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0pIHsgbV9y
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gcmVwbGljYU9yaWdpblRyYW5zZm9ybTsgfQorICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9CisKKyAgICB2b2lkIHNldFJlcGxp
Y2FTY3JlZW5TcGFjZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGlj
YVNjcmVlblNwYWNlVHJhbnNmb3JtKSB7IG1fcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtID0g
cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9CiAKICAgICBib29sIHRhcmdldFN1cmZhY2VUcmFu
c2Zvcm1zQXJlQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlVHJhbnNm
b3Jtc0FyZUFuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0VGFyZ2V0U3VyZmFjZVRyYW5zZm9ybXNB
cmVBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV90YXJnZXRTdXJmYWNlVHJhbnNmb3Jtc0Fy
ZUFuaW1hdGluZyA9IGFuaW1hdGluZzsgfQpAQCAtMTQxLDggKzE1MCwxMSBAQCBwcml2YXRlOgog
ICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRp
bmc7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9z
Y3JlZW5TcGFjZVRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FE
cmF3VHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmVwbGljYU9yaWdpblRy
YW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FTY3JlZW5TcGFjZVRy
YW5zZm9ybTsKICAgICBib29sIG1fdGFyZ2V0U3VyZmFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7
CiAgICAgYm9vbCBtX3NjcmVlblNwYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsKICAgICBGaWx0
ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCmluZGV4IDcwMzJiZTI2
OWVkZjJjZDU4ZmVhZmFkNTg1ZDdhNjMzMTU0ZmMwOTkuLjllZmRkZjlmYjFhNzgyNTJhMDgwODBl
MzdkNDVmN2FhYmY4ZTNlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMzEwLDYgKzMxMCw1
NiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JT
aW5nbGVSZW5kZXJTdXJmYWNlKQogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEo
cGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5v
cmlnaW5UcmFuc2Zvcm0oKSk7CiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShw
YXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRy
YXdUcmFuc2Zvcm0oKSk7CiAKKyAgICAvLyBUaGUgc2NyZWVuIHNwYWNlIGlzIHRoZSBzYW1lIGFz
IHRoZSB0YXJnZXQgc2luY2UgdGhlIGNoaWxkIHN1cmZhY2UgZHJhd3MgaW50byB0aGUgcm9vdC4K
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jt
c0ZvclJlcGxpY2EpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZFJl
cGxpY2EgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFk
ZENoaWxkKGdyYW5kQ2hpbGQpOworICAgIGNoaWxkLT5zZXRSZXBsaWNhTGF5ZXIoY2hpbGRSZXBs
aWNhLmdldCgpKTsKKworICAgIC8vIENoaWxkIGlzIHNldCB1cCBzbyB0aGF0IGEgbmV3IHJlbmRl
ciBzdXJmYWNlIHNob3VsZCBiZSBjcmVhdGVkLgorICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07CisgICAgcGFyZW50TGF5ZXJUcmFu
c2Zvcm0uc2NhbGUzZCgyLjAsIDIuMCwgMS4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBw
YXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3Iu
dHJhbnNsYXRlKDIuNSwgMy4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJs
YXllck1hdHJpeDsKKyAgICBwYXJlbnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLjAsIDEwLjAs
IDMuMyk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRl
cjsKKyAgICBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50
VHJhbnNsYXRpb25Ub0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNs
YXRpb25Ub0FuY2hvci5pbnZlcnNlKCkKKyAgICAgICAgICAgICogcGFyZW50VHJhbnNsYXRpb25U
b0NlbnRlciAqIHBhcmVudFN1YmxheWVyTWF0cml4ICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRl
ci5pbnZlcnNlKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyOworICAgIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4wLCA5LjAp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FMYXllclRyYW5zZm9ybTsKKyAgICBy
ZXBsaWNhTGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgzLjAsIDMuMCwgMS4wKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCByZXBsaWNhQ29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50Q29tcG9zaXRl
VHJhbnNmb3JtICogcmVwbGljYUxheWVyVHJhbnNmb3JtOworCisgICAgLy8gQ2hpbGQncyByZW5k
ZXIgc3VyZmFjZSBzaG91bGQgbm90IGV4aXN0IHlldC4KKyAgICBBU1NFUlRfRkFMU0UoY2hpbGQt
PnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBh
cmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1YmxheWVyTWF0cml4LCBG
bG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUo
MTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAw
LjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9p
bnQoLTAuNWYsIC0wLjVmKSwgSW50U2l6ZSgxLCAxKSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoY2hpbGRSZXBsaWNhLmdldCgpLCByZXBsaWNhTGF5ZXJUcmFuc2Zv
cm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAu
MGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOworCisgICAgLy8gUmVuZGVy
IHN1cmZhY2Ugc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIG5vdy4KKyAgICBBU1NFUlRfVFJVRShj
aGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRVEoY2hpbGQtPnJlbmRlclN1cmZh
Y2UoKSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKHJlcGxpY2FDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPnJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNU
X1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShyZXBsaWNhQ29tcG9zaXRlVHJhbnNmb3JtLCBjaGls
ZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0Zv
clJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCkBAIC0zMTcsNiArMzY3LDcgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJh
cmNoeSkKICAgICAvLyBUaGlzIHRlc3QgY3JlYXRlcyBhIG1vcmUgY29tcGxleCB0cmVlIGFuZCB2
ZXJpZmllcyBpdCBhbGwgYXQgb25jZS4gVGhpcyBjb3ZlcnMgdGhlIGZvbGxvd2luZyBjYXNlczoK
ICAgICAvLyAgIC0gbGF5ZXJzIHRoYXQgYXJlIGRlc2NyaWJlZCB3LnIudC4gYSByZW5kZXIgc3Vy
ZmFjZTogc2hvdWxkIGhhdmUgZHJhdyB0cmFuc2Zvcm1zIGRlc2NyaWJlZCB3LnIudC4gdGhhdCBz
dXJmYWNlCiAgICAgLy8gICAtIEEgcmVuZGVyIHN1cmZhY2UgZGVzY3JpYmVkIHcuci50LiBhbiBh
bmNlc3RvciByZW5kZXIgc3VyZmFjZTogc2hvdWxkIGhhdmUgYSBkcmF3IHRyYW5zZm9ybSBkZXNj
cmliZWQgdy5yLnQuIHRoYXQgYW5jZXN0b3Igc3VyZmFjZQorICAgIC8vICAgLSBSZXBsaWNhcyBv
ZiBhIHJlbmRlciBzdXJmYWNlIGFyZSBkZXNjcmliZWQgdy5yLnQuIHRoZSByZXBsaWNhJ3MgdHJh
bnNmb3JtIGFyb3VuZCBpdHMgYW5jaG9yLCBhbG9uZyB3aXRoIHRoZSBzdXJmYWNlIGl0c2VsZi4K
ICAgICAvLyAgIC0gU2FuaXR5IGNoZWNrIG9uIHJlY3Vyc2lvbjogdmVyaWZ5IHRyYW5zZm9ybXMg
b2YgbGF5ZXJzIGRlc2NyaWJlZCB3LnIudC4gYSByZW5kZXIgc3VyZmFjZSB0aGF0IGlzIGRlc2Ny
aWJlZCB3LnIudC4gYW4gYW5jZXN0b3IgcmVuZGVyIHN1cmZhY2UuCiAgICAgLy8gICAtIHZlcmlm
eWluZyB0aGF0IGVhY2ggbGF5ZXIgaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JyZWN0IHJlbmRl
clN1cmZhY2UgYW5kIHRhcmdldFJlbmRlclN1cmZhY2UgdmFsdWVzLgogCkBAIC0zMjYsNiArMzc3
LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9y
UmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRP
ZlJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGRPZlJTMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZE9mUlMyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHJlcGxpY2FPZlJTMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhT2ZSUzIgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZE9mUm9vdCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMxID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwpAQCAtMzM4LDYgKzM5MSw4IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRl
clN1cmZhY2VIaWVyYXJjaHkpCiAgICAgY2hpbGRPZlJvb3QtPmFkZENoaWxkKGdyYW5kQ2hpbGRP
ZlJvb3QpOwogICAgIGNoaWxkT2ZSUzEtPmFkZENoaWxkKGdyYW5kQ2hpbGRPZlJTMSk7CiAgICAg
Y2hpbGRPZlJTMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZE9mUlMyKTsKKyAgICByZW5kZXJTdXJmYWNl
MS0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2FPZlJTMS5nZXQoKSk7CisgICAgcmVuZGVyU3VyZmFj
ZTItPnNldFJlcGxpY2FMYXllcihyZXBsaWNhT2ZSUzIuZ2V0KCkpOwogCiAgICAgLy8gSW4gY29t
YmluYXRpb24gd2l0aCBkZXNjZW5kYW50RHJhd3NDb250ZW50LCBvcGFjaXR5ICE9IDEgZm9yY2Vz
IHRoZSBsYXllciB0byBoYXZlIGEgbmV3IHJlbmRlclN1cmZhY2UuCiAgICAgcmVuZGVyU3VyZmFj
ZTEtPnNldE9wYWNpdHkoMC41Zik7CkBAIC0zNDYsNiArNDAxLDcgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNo
eSkKICAgICAvLyBBbGwgbGF5ZXJzIGluIHRoZSB0cmVlIGFyZSBpbml0aWFsaXplZCB3aXRoIGFu
IGFuY2hvciBhdCAyLjUgYW5kIGEgc2l6ZSBvZiAoMTAsMTApLgogICAgIC8vIG1hdHJpeCAiQSIg
aXMgdGhlIGNvbXBvc2l0ZSBsYXllciB0cmFuc2Zvcm0gdXNlZCBpbiBhbGwgbGF5ZXJzLCBjZW50
ZXJlZCBhYm91dCB0aGUgYW5jaG9yIHBvaW50CiAgICAgLy8gbWF0cml4ICJCIiBpcyB0aGUgc3Vi
bGF5ZXIgdHJhbnNmb3JtIHVzZWQgaW4gYWxsIGxheWVycywgY2VudGVyZWQgYWJvdXQgdGhlIGNl
bnRlciBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIuCisgICAgLy8gbWF0cml4ICJSIiBpcyB0aGUgY29t
cG9zaXRlIHJlcGxpY2EgdHJhbnNmb3JtIHVzZWQgaW4gYWxsIHJlcGxpY2EgbGF5ZXJzLgogICAg
IC8vCiAgICAgLy8geCBjb21wb25lbnQgdGVzdHMgdGhhdCBsYXllclRyYW5zZm9ybSBhbmQgc3Vi
bGF5ZXJUcmFuc2Zvcm0gYXJlIGRvbmUgaW4gdGhlIHJpZ2h0IG9yZGVyICh0cmFuc2xhdGlvbiBh
bmQgc2NhbGUgYXJlIG5vbmNvbW11dGF0aXZlKS4KICAgICAvLyB5IGNvbXBvbmVudCBoYXMgYSB0
cmFuc2xhdGlvbiBieSAxLjAgZm9yIGV2ZXJ5IGFuY2VzdG9yLCB3aGljaCBpbmRpY2F0ZXMgdGhl
ICJkZXB0aCIgb2YgdGhlIGxheWVyIGluIHRoZSBoaWVyYXJjaHkuCkBAIC0zNTcsOSArNDEzLDEy
IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJl
bmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEuMCwg
MS4wKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9ybTsKICAgICBz
dWJsYXllclRyYW5zZm9ybS5zY2FsZTNkKDEwLjAsIDEuMCwgMS4wKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCByZXBsaWNhTGF5ZXJUcmFuc2Zvcm07CisgICAgcmVwbGljYUxheWVyVHJhbnNm
b3JtLnNjYWxlM2QoLTIuMCwgNS4wLCAxLjApOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
QSA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9B
bmNob3IuaW52ZXJzZSgpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IEIgPSB0cmFuc2xhdGlv
blRvQ2VudGVyICogc3VibGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLmludmVy
c2UoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSID0gQSAqIHRyYW5zbGF0aW9uVG9BbmNo
b3IgKiByZXBsaWNhTGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2Uo
KTsKIAogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBsYXll
clRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBG
bG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlbmRlclN1cmZhY2UxLmdldCgpLCBsYXllclRyYW5z
Zm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBv
aW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKQEAgLTM3MCw2ICs0Mjks
OCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JS
ZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Z3JhbmRDaGlsZE9mUm9vdC5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3Jt
LCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6
ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFu
ZENoaWxkT2ZSUzEuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxv
YXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAs
IDEwKSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGls
ZE9mUlMyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9p
bnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlcGxpY2FPZlJTMS5n
ZXQoKSwgcmVwbGljYUxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2lu
dCgpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlcGxpY2FPZlJTMi5nZXQoKSwgcmVwbGljYUxheWVy
VHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgpLCBGbG9hdFBvaW50KDIu
NWYsIDAuMGYpLCBJbnRTaXplKCksIGZhbHNlKTsKIAogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKIApAQCAtNDM1LDggKzQ5Niwx
NCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JS
ZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIC8vCiAgICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBv
ZiByZW5kZXIgc3VyZmFjZSAxIGlzIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gcm9vdC4KICAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKEEgKiBCICogQSwgcmVuZGVyU3VyZmFj
ZTEtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFO
U0ZPUk1BVElPTl9NQVRSSVhfRVEoQSAqIEIgKiBSLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3Vy
ZmFjZSgpLT5yZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgp
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKEEgKiBCICogUiwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKS0+cmVwbGlj
YVNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVu
ZGVyIHN1cmZhY2UgMiBpcyBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHJlbmRlciBzdXJmYWNl
IDIuCiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShCICogQSwgcmVuZGVyU3Vy
ZmFjZTItPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIEVYUEVDVF9U
UkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoQiAqIFIsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJm
YWNlKCktPnJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1
cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShBICogQiAqIEEgKiBCICogUiwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1
cmZhY2UoKS0+cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gU2FuaXR5
IGNoZWNrLiBJZiB0aGVzZSBmYWlsIHRoZXJlIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSB0ZXN0
IGl0c2VsZi4KICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGF0IHdlIGNvcnJlY3RseSBzZXQgdXAg
dHJhbnNmb3JtcyBzbyB0aGF0IHRoZSB5LWNvbXBvbmVudCBvZiB0aGUgc2NyZWVuLXNwYWNlIHRy
YW5zZm9ybQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>