<?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>84317</bug_id>
          
          <creation_ts>2012-04-18 22:23:45 -0700</creation_ts>
          <short_desc>[chromium] Don&apos;t occlude pixels in a surface that are needed for a background filter blur</short_desc>
          <delta_ts>2012-05-02 19:42:05 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>abarth</cc>
    
    <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>605372</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 22:23:45 -0700</bug_when>
    <thetext>[chromium] Don&apos;t occlude pixels in a surface that are needed for a background filter blur</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605374</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 22:26:29 -0700</bug_when>
    <thetext>This catches #1 of the following 4 pieces:

1) Background filter blur needs valid drawn pixels (in the render surface) in a radius out from the pixels it reads.
2) Foreground filter blur needs valid painted pixels in a radius out from the pixels it will display.
3) Background filter blur moves damage in a parent around inside its child with a background blur up to the blur radius.
4) Foreground filter blur moves damage around in a surface up to the blur radius.

Others will be separate CLs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605376</commentid>
    <comment_count>2</comment_count>
      <attachid>137838</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 22:32:09 -0700</bug_when>
    <thetext>Created attachment 137838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605377</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-18 22:33:13 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609485</commentid>
    <comment_count>4</comment_count>
      <attachid>137838</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-24 23:27:18 -0700</bug_when>
    <thetext>Comment on attachment 137838
Patch

Public API changes look fine (it&apos;s just updating a comment), the other change looks a bit beyond me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610213</commentid>
    <comment_count>5</comment_count>
      <attachid>137838</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-25 17:37:09 -0700</bug_when>
    <thetext>Comment on attachment 137838
Patch

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

Just to check my understanding: we walk layers from front to back.  Because readback filters read layers that have drawn underneath, we haven&apos;t actually visited those layers yet.  So, you clear the occlusion from the the entire area that the filter could pull pixels from, in the hope that if the other layers completely opaquely fill that area, then we won&apos;t need gutter quads to fill that space.  (I say gutter quads, since that&apos;s the only thing that cares about occlusion on the root layer, and only surfaces drawing into the root layer have background filters.)

I think this is right for the edge cases of the entire under-filter area being opaque or non-opaque, but is incorrect if the region under the filter is only partially opaque? It seems to me like that partially opaque region needs to be deflated by the outsets to be correct.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:184
&gt; +    removeOcclusionOverMovedPixels(oldTarget, newTarget, oldTarget-&gt;originTransform());

Why does this happen after merging the stack down? Opaque regions on a layer with a background filter should still apply to the layer below and not be erased by the removeOcclusion part?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610312</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 19:27:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 137838 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=137838&amp;action=review
&gt; 
&gt; Just to check my understanding: we walk layers from front to back.  Because readback filters read layers that have drawn underneath, we haven&apos;t actually visited those layers yet.

Yes.

&gt; So, you clear the occlusion from the the entire area that the filter could pull pixels from, in the hope that if the other layers completely opaquely fill that area, then we won&apos;t need gutter quads to fill that space.  (I say gutter quads, since that&apos;s the only thing that cares about occlusion on the root layer, and only surfaces drawing into the root layer have background filters.)

I hadn&apos;t actually thought about gutter quads. But you&apos;re right, if under this layer&apos;s opaque stuff things are not opaque, we&apos;ll end up including gutter quads in the readback as those are drawn at the back of the root surface.

&gt; I think this is right for the edge cases of the entire under-filter area being opaque or non-opaque, but is incorrect if the region under the filter is only partially opaque? It seems to me like that partially opaque region needs to be deflated by the outsets to be correct.

I am unsure what you mean here. We remove occlusion at the point of just below the blurring layer, so that we ensure pixels you can see through it are not considered occluded, and get drawn. I don&apos;t see how the opaque-ness/occlusion of things below this blurred layer matters at all here..

If things are opaque then they&apos;ll occlude other stuff that is further below the blurring layer. But that also implies that those pixels will be drawn below the blurring layer. This may cause more pixels to be drawn than is strictly needed but that&apos;s okay.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:184
&gt; &gt; +    removeOcclusionOverMovedPixels(oldTarget, newTarget, oldTarget-&gt;originTransform());
&gt; 
&gt; Why does this happen after merging the stack down? Opaque regions on a layer with a background filter should still apply to the layer below and not be erased by the removeOcclusion part?

The layer itself should not occlude the layer below in the area that it needs to read pixels from, nothing should occlude that. We need to ensure that it gets painted and drawn so we are able to read it back correctly.

Think left half of layer is opaque, right half clear with background blur. It will need to read pixels from under the left half in the surface below, so those pixels are not occluded from view even though they are below this layers opaque half.

But since the left half is opaque, it doesn&apos;t cause any pixels below it to become unoccluded, only the right half does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610313</commentid>
    <comment_count>7</comment_count>
      <attachid>137838</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 19:30:55 -0700</bug_when>
    <thetext>Comment on attachment 137838
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:184
&gt;&gt;&gt; +    removeOcclusionOverMovedPixels(oldTarget, newTarget, oldTarget-&gt;originTransform());
&gt;&gt; 
&gt;&gt; Why does this happen after merging the stack down? Opaque regions on a layer with a background filter should still apply to the layer below and not be erased by the removeOcclusion part?
&gt; 
&gt; The layer itself should not occlude the layer below in the area that it needs to read pixels from, nothing should occlude that. We need to ensure that it gets painted and drawn so we are able to read it back correctly.
&gt; 
&gt; Think left half of layer is opaque, right half clear with background blur. It will need to read pixels from under the left half in the surface below, so those pixels are not occluded from view even though they are below this layers opaque half.
&gt; 
&gt; But since the left half is opaque, it doesn&apos;t cause any pixels below it to become unoccluded, only the right half does.

Oh, so since we end up removing everything under the layer, it&apos;s maybe strange to do this after the merge. But in theory we could take the inverse of the occlusion under the oldTarget (so just its unoccluded part), expand that, and subtract that from occlusion in the new target.

Maybe we should do that..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610358</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-25 22:20:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt;
&gt; &gt; I think this is right for the edge cases of the entire under-filter area being opaque or non-opaque, but is incorrect if the region under the filter is only partially opaque? It seems to me like that partially opaque region needs to be deflated by the outsets to be correct.
&gt; 
&gt; I am unsure what you mean here. We remove occlusion at the point of just below the blurring layer, so that we ensure pixels you can see through it are not considered occluded, and get drawn. I don&apos;t see how the opaque-ness/occlusion of things below this blurred layer matters at all here..
&gt; 
&gt; If things are opaque then they&apos;ll occlude other stuff that is further below the blurring layer. But that also implies that those pixels will be drawn below the blurring layer. This may cause more pixels to be drawn than is strictly needed but that&apos;s okay.

Here&apos;s my example: You have a viewport (0, 0, 20, 20).  The root doesn&apos;t draw content (oops).  The first child of the root is an opaque layer with absolute rect (5, 5, 10, 10).  The second child of the root is a layer rect (0, 0, 20, 20) that perfectly covers the root and has a blur of 2 pixels radius.

What&apos;s the final occlusion?

With the algorithm in your patch, it seems like you&apos;d unocclude everything from the layer with the background blur, then visit the other layer and apply the occlusion from the opaque layer underneath because you&apos;re walking front to back.  The final occlusion is (5, 5, 10, 10), just the occlusion from the opaque layer.

However...the final pixels in the viewport are all blurred because of the background filter, so really the only fully opaque values are in the rect (7, 7, 6, 6).

I guess I&apos;m saying that I&apos;m wondering if it makes sense to just keep an ordered list of background filter rects until you&apos;ve processed everything and *then* touch up the occlusion (somehow, if needed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610818</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-26 12:29:33 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt;
&gt; &gt; &gt; I think this is right for the edge cases of the entire under-filter area being opaque or non-opaque, but is incorrect if the region under the filter is only partially opaque? It seems to me like that partially opaque region needs to be deflated by the outsets to be correct.
&gt; &gt; 
&gt; &gt; I am unsure what you mean here. We remove occlusion at the point of just below the blurring layer, so that we ensure pixels you can see through it are not considered occluded, and get drawn. I don&apos;t see how the opaque-ness/occlusion of things below this blurred layer matters at all here..
&gt; &gt; 
&gt; &gt; If things are opaque then they&apos;ll occlude other stuff that is further below the blurring layer. But that also implies that those pixels will be drawn below the blurring layer. This may cause more pixels to be drawn than is strictly needed but that&apos;s okay.
&gt; 
&gt; Here&apos;s my example: You have a viewport (0, 0, 20, 20).  The root doesn&apos;t draw content (oops).  The first child of the root is an opaque layer with absolute rect (5, 5, 10, 10).  The second child of the root is a layer rect (0, 0, 20, 20) that perfectly covers the root and has a blur of 2 pixels radius.
&gt; 
&gt; What&apos;s the final occlusion?
&gt; 
&gt; With the algorithm in your patch, it seems like you&apos;d unocclude everything from the layer with the background blur, then visit the other layer and apply the occlusion from the opaque layer underneath because you&apos;re walking front to back.  The final occlusion is (5, 5, 10, 10), just the occlusion from the opaque layer.
&gt; 
&gt; However...the final pixels in the viewport are all blurred because of the background filter, so really the only fully opaque values are in the rect (7, 7, 6, 6).
&gt; 
&gt; I guess I&apos;m saying that I&apos;m wondering if it makes sense to just keep an ordered list of background filter rects until you&apos;ve processed everything and *then* touch up the occlusion (somehow, if needed).

Yehhhh ok I see what you mean, thanks! We need to blur unoccluded areas out as well. I think it&apos;s important to determine what you need as you walk front to back, as the code queries the occlusion tracker at that time, not later.

We probably need to store a list of background blur rects and apply them to shrink occlusion on everything below them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611990</commentid>
    <comment_count>10</comment_count>
      <attachid>139301</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-27 16:21:14 -0700</bug_when>
    <thetext>Created attachment 139301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612089</commentid>
    <comment_count>11</comment_count>
      <attachid>139322</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-27 19:27:44 -0700</bug_when>
    <thetext>Created attachment 139322
Patch

rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612524</commentid>
    <comment_count>12</comment_count>
      <attachid>139322</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-30 03:08:45 -0700</bug_when>
    <thetext>Comment on attachment 139322
Patch

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

I know my last comment on this bug suggested that occlusion underneath a filter also needed to be reduced, but I have reconvinced myself that&apos;s not actually the case.   I think the algorithm should be the following: when leaving a surface with a background filter, do the reduceOcclusion() pass for the outsets/clip rect for the current filter.  I think that&apos;s it; the filter info shouldn&apos;t be saved or reapplied.

Here&apos;s why: if you have a background filter covering the entire page and underneath it, two opaque layers of exactly the same size and position, the top opaque layer *should* cover the bottom opaque layer.  And, the only way this could happen is if occlusion for the top opaque layer wasn&apos;t reduced.  If the order were switched to be top opaque layer, filter layer, bottom opaque layer, then the top opaque layer should be reduced when the filter layer is finished, because the bototm layer in this case isn&apos;t entirely occluded.

What do you think?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:230
&gt; +    occlusionReducedRect.pixelExpandedInTarget = filterOutsetsInTarget;
&gt; +    occlusionReducedRect.effectedAreaInTarget = boundsInTarget;
&gt; +    occlusionReducedRect.pixelExpandedInScreen = filterOutsetsInScreen;
&gt; +    occlusionReducedRect.effectedAreaInScreen = boundsInScreen;

(Not that it&apos;s wrong to be general here, but screen == target always, because of the way background filters are limited to only apply to surfaces with the default surface as a target?)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:233
&gt; +static inline void reduceOcclusion(const IntRect&amp; effectedArea, const IntRect&amp; pixelExpanded, Region&amp; occlusion)

:%s/effected/affected/g</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612885</commentid>
    <comment_count>13</comment_count>
      <attachid>139322</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-30 13:02:35 -0700</bug_when>
    <thetext>Comment on attachment 139322
Patch

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

Ok right. So things below the blur all get blurred together as one operation. So you&apos;re right, the two opaque layers below should have their edges blurred together, and only when leaving the surface.

To make it general what should happen is:
1. On blur, blur all occlusion above and including the surface with blur.
2. Save the blur area.
3. On leaving the target surface, apply all saved blur areas to the surface&apos;s occlusion.

Because this only happens on the root surface right now, 3. never happens. Should we just ignore 2 and 3 then?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:230
&gt;&gt; +    occlusionReducedRect.effectedAreaInScreen = boundsInScreen;
&gt; 
&gt; (Not that it&apos;s wrong to be general here, but screen == target always, because of the way background filters are limited to only apply to surfaces with the default surface as a target?)

Yeh, tho this code doesn&apos;t know about the restriction. Are you asking to make this explicit or just clarifying for yourself. I&apos;d rather keep this code general and not knowing about that.. but then, above comment is related.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:233
&gt;&gt; +static inline void reduceOcclusion(const IntRect&amp; effectedArea, const IntRect&amp; pixelExpanded, Region&amp; occlusion)
&gt; 
&gt; :%s/effected/affected/g

ahhh. *&gt;_&lt;*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613616</commentid>
    <comment_count>14</comment_count>
      <attachid>139666</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-01 13:27:31 -0700</bug_when>
    <thetext>Created attachment 139666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613617</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-01 13:29:42 -0700</bug_when>
    <thetext>Alright patch updated! This reflects our acquired knowledge along the way to this point, making a pretty clean CL I think.

We reduce all occlusion up to and including the contributing surface when we encounter a background blur filter. Hopefully this code makes lots of sense to you! I like that it&apos;s much simpler than last incarnation, and only requires file-static helper methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614699</commentid>
    <comment_count>16</comment_count>
      <attachid>139666</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-02 14:56:17 -0700</bug_when>
    <thetext>Comment on attachment 139666
Patch

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

Can you add one more test where the background filter is entirely occluded by something above it and the resulting occlusion isn&apos;t reduced?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:159
&gt; +static inline void reduceOcclusion(const IntRect&amp; affectedArea, const IntRect&amp; expandedPixel, Region&amp; occlusion)

Some comment about what &quot;expandedPixel&quot; means here would be helpful.

&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:2759
&gt; +        // Save the distance of influence for the blur effect.
&gt; +        int outsetTop, outsetRight, outsetBottom, outsetLeft;
&gt; +        filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft);

You don&apos;t seem to use this in this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614753</commentid>
    <comment_count>17</comment_count>
      <attachid>139666</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-02 16:02:13 -0700</bug_when>
    <thetext>Comment on attachment 139666
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:159
&gt;&gt; +static inline void reduceOcclusion(const IntRect&amp; affectedArea, const IntRect&amp; expandedPixel, Region&amp; occlusion)
&gt; 
&gt; Some comment about what &quot;expandedPixel&quot; means here would be helpful.

k

&gt;&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:2759
&gt;&gt; +        filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft);
&gt; 
&gt; You don&apos;t seem to use this in this test.

yes thanks, since this is now testing non-reduction instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614766</commentid>
    <comment_count>18</comment_count>
      <attachid>139905</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-02 16:08:25 -0700</bug_when>
    <thetext>Created attachment 139905
Patch

The diff got larger due to a small API change on occlusion tracker.

unoccludedContributingSurfaceContentRect(Layer*) became unoccludedContributingSurfaceContentRect(Surface*).

It used to need the Layer* but Surface* has all the data it needs these days anyways. This lets us figure out which part of the contributing surface&apos;s background filter will be used, so I can write that unit test you asked for.

There&apos;s a huge regex change in the CCOTTest.cpp because of the API change, to pass in the surface instead of the layer though. Here&apos;s the diff minus the test.cpp http://pastebin.com/iW4Q8bdS

Added 2 new tests. One where the filter is completely occluded, and one where it is partially occluded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614780</commentid>
    <comment_count>19</comment_count>
      <attachid>139905</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-02 16:21:34 -0700</bug_when>
    <thetext>Comment on attachment 139905
Patch

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

R=me, with a few small things to change before landing.  Thanks for all the iterations.  :)

&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:2743
&gt; +        // Make a surface and its replica, each 50x50, that are completely surrounded by opaque layers which are above them in the z-order.

Not really true here.

&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:2792
&gt; +        // Make a surface and its replica, each 50x50, that are completely surrounded by opaque layers which are above them in the z-order.

s/surrounded/occluded/

&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:2840
&gt; +        // Make a surface and its replica, each 50x50, that are completely surrounded by opaque layers which are above them in the z-order.

s/surrounded/partially occluded/

&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:2902
&gt; +        EXPECT_EQ_RECT(occlusionBesideSurface, targetRects[0]);
&gt; +        EXPECT_EQ_RECT(occlusionBesideSurface, screenRects[0]);
&gt; +        EXPECT_EQ_RECT(occlusionBesideReplica, targetRects[1]);
&gt; +        EXPECT_EQ_RECT(occlusionBesideReplica, screenRects[1]);
&gt; +        EXPECT_EQ_RECT(occlusionAboveSurface, targetRects[2]);
&gt; +        EXPECT_EQ_RECT(occlusionAboveSurface, screenRects[2]);
&gt; +        EXPECT_EQ_RECT(occlusionAboveReplica, targetRects[3]);
&gt; +        EXPECT_EQ_RECT(occlusionAboveReplica, screenRects[3]);

I don&apos;t think the ordering of rects in Region is something you should depend on.  Maybe construct a region yourself with these rects and see if it equals occlusionInFooSpace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614783</commentid>
    <comment_count>20</comment_count>
      <attachid>139905</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-02 16:23:32 -0700</bug_when>
    <thetext>Comment on attachment 139905
Patch

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

thanks :)

&gt;&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:2902
&gt;&gt; +        EXPECT_EQ_RECT(occlusionAboveReplica, screenRects[3]);
&gt; 
&gt; I don&apos;t think the ordering of rects in Region is something you should depend on.  Maybe construct a region yourself with these rects and see if it equals occlusionInFooSpace?

yeh sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614886</commentid>
    <comment_count>21</comment_count>
      <attachid>139930</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-02 18:10:39 -0700</bug_when>
    <thetext>Created attachment 139930
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614944</commentid>
    <comment_count>22</comment_count>
      <attachid>139930</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-02 19:41:50 -0700</bug_when>
    <thetext>Comment on attachment 139930
Patch for landing

Clearing flags on attachment: 139930

Committed r115930: &lt;http://trac.webkit.org/changeset/115930&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614945</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-02 19:42:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137838</attachid>
            <date>2012-04-18 22:32:09 -0700</date>
            <delta_ts>2012-04-27 16:21:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84317-20120419013208.patch</filename>
            <type>text/plain</type>
            <size>28807</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA3ZjkzMzcyODE3MTMw
MmIyMjlmNTNkMzYwYTMwMTg3Y2NkODU1MmJmLi5kNmI3NDczMzYxZmU2MzA1ZjZiNjQ2ODcwNjE3
MmY2ODQwZTkyMWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNC0xOCAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEg
YmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaDoKKwog
MjAxMi0wNC0xNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJQbHVnaW5Db250YWluZXJJbXBsIG92ZXIgdG8gdXNl
IFdlYkV4dGVybmFsVGV4dHVyZUxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxYjcwOTdiM2UyMzg0ZWU1
NGJmMmVhNGU4MmRjNzhiZTZjZWZhOS4uOWE3NGQ0ZmI4NzcyOTNlOTQzNzFlNzE0NDg4YThkYTcy
MmZiM2E5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTE4ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRG9uJ3Qg
b2NjbHVkZSBwaXhlbHMgaW4gYSBzdXJmYWNlIHRoYXQgYXJlIG5lZWRlZCBmb3IgYSBiYWNrZ3Jv
dW5kIGZpbHRlciBibHVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDMxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJsdXIgZmlsdGVycyBtb3ZlIHBpeGVscyBhcm91bmQsIHNvIGEgcGl4ZWwgY2FuIGlu
Zmx1ZW5jZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgcGl4ZWxzIGF0IHNvbWUgZGlzdGFuY2UgYXdh
eS4gSWYgYSBwaXhlbCBpcyBub3Qgb2NjbHVkZWQsIHRoZW4gYWxsCisgICAgICAgIHBpeGVscyB3
aXRoaW4gdGhlIHJhZGl1cyBvZiB0aGUgYmx1ciBtYXkgaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiB0
aGF0CisgICAgICAgIHBpeGVsLCBzbyB0aGV5IHNob3VsZCBhbHNvIHN0YXkgdW5vY2NsdWRlZC4K
KworICAgICAgICBGb3IgYmFja2dyb3VuZCBmaWx0ZXJzLCB0aGUgcGl4ZWxzIGFyZSByZWFkIGZy
b20gdGhlIGZpbHRlcidzIHRhcmdldAorICAgICAgICBzdXJmYWNlLCBzbyB3ZSByZW1vdmUgb2Nj
bHVzaW9uIGZyb20gdGhhdCB0YXJnZXQgc3VyZmFjZSBmcm9tIHBpeGVscworICAgICAgICB0aGF0
IHdpbGwgYmx1ciBpbnRvIHZpc2libGUgcGl4ZWxzLgorCisgICAgICAgIFVuaXQgdGVzdDogQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZp
bHRlcgorICAgICAgICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVk
ZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXJXaXRoQ2xpcAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjo6OnJlbW92ZU9jY2x1c2lvbk92ZXJNb3ZlZFBpeGVs
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmg6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJCYXNlKToKKwogMjAxMi0wNC0x
OCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gQ29uc29saWRhdGUgYWRqdXN0VGV4dFJlbmRlck1vZGUgY29weXBhc3RhIGludG8gU2tpYSBj
b250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA0NDA5ZWEyOGVkYzQ2N2E5OTYw
N2Q4ODMxODgyNWEyNWMxNDZmM2UuLmE2ZWI5ZjZkZGE5MjAwMTcyOTgwZGQxZjRhYzY3ZGE2NzM0
ZjNhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTIt
MDQtMTggIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBEb24ndCBvY2NsdWRlIHBpeGVscyBpbiBhIHN1cmZhY2UgdGhhdCBhcmUgbmVlZGVk
IGZvciBhIGJhY2tncm91bmQgZmlsdGVyIGJsdXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0U3VyZmFjZUNoaWxk
T2ZDbGlwcGluZ1N1cmZhY2U6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6Cisg
ICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JC
YWNrZ3JvdW5kRmlsdGVyKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyOjpydW5NeVRl
c3QpOgorICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVl
ZGVkRm9yQmFja2dyb3VuZEZpbHRlcldpdGhDbGlwKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpD
Q09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5k
RmlsdGVyV2l0aENsaXA6OnJ1bk15VGVzdCk6CisKIDIwMTItMDQtMTggIE5pY28gV2ViZXIgIDx0
aGFraXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bS9tYWNdIEZpeCBidWlsZC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3Bl
cmF0aW9uLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZpbHRlck9wZXJh
dGlvbi5oCmluZGV4IDU2MWNhZDNjMmM3ZTRjNmQ3NTgzNWI4ODk0YzIwYjc5NmYxMjExZTUuLmRh
NzhjNTUyNTU3NmRlNWIxMjgzNTI2ZTk4MDcwMTQ2Yzk5YTU0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgKKysrIGIvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaApAQCAtNzcs
NyArNzcsOCBAQCBzdHJ1Y3QgV2ViQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biA6IHB1YmxpYyBXZWJGaWx0ZXJPcGVyYXRpb24gewogICAgICAgICBGaWx0ZXJUeXBlSW52ZXJ0
ID0gNSwKICAgICAgICAgRmlsdGVyVHlwZUJyaWdodG5lc3MgPSA3LAogICAgICAgICBGaWx0ZXJU
eXBlQ29udHJhc3QgPSA4Ci0gICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNhdXNlIHRo
aXMgaXMgbW9yZSBleHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0aGUgbGF5
ZXIuCisgICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNhdXNlIHRoaXMgaXMgbW9yZSBl
eHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0aGUgbGF5ZXIsCisgICAgICAg
IC8vIGFuZCBvcGFjaXR5IGlzIG5vdCBhbGxvd2VkIGZvciBiYWNrZ3JvdW5kIGZpbHRlcnMuCiAg
ICAgfTsKIAogICAgIFdlYkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oRmls
dGVyVHlwZSB0eXBlLCBmbG9hdCBhbW91bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmNwcAppbmRleCA0NGE2OGJhNTIxNDA5MjA5MmJjNjBmYWU0MDRkYWNiOTNmOWQ5MjkyLi45
NmY4N2U0ZjgzN2U5MDBjOThlMGMwNDQzOTg5MmVjNDBkYzM3ZTNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKQEAgLTE3Miw3ICsxNzIsNiBAQCB2b2lkIENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmxlYXZlVG9UYXJn
ZXRSZW5kZXJTdQogCiAgICAgaWYgKHN1cmZhY2VXaWxsQmVBdFRvcEFmdGVyUG9wKSB7CiAgICAg
ICAgIC8vIE1lcmdlIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGRvd24uCi0KICAgICAgICAgbV9zdGFj
a1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblNjcmVlbi51bml0ZShtX3N0YWNrW2xhc3RJbmRl
eF0ub2NjbHVzaW9uSW5TY3JlZW4pOwogICAgICAgICBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLm9j
Y2x1c2lvbkluVGFyZ2V0LnVuaXRlKG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0KTsKICAg
ICAgICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7CkBAIC0xODEsNiArMTgwLDU2IEBAIHZvaWQgQ0NP
Y2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6bGVhdmVU
b1RhcmdldFJlbmRlclN1CiAgICAgICAgIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPSBuZXdUYXJn
ZXQ7CiAgICAgICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gb2xkVGFyZ2V0
T2NjbHVzaW9uSW5OZXdUYXJnZXQ7CiAgICAgfQorCisgICAgcmVtb3ZlT2NjbHVzaW9uT3Zlck1v
dmVkUGl4ZWxzKG9sZFRhcmdldCwgbmV3VGFyZ2V0LCBvbGRUYXJnZXQtPm9yaWdpblRyYW5zZm9y
bSgpKTsKKyAgICBpZiAob2xkVGFyZ2V0LT5oYXNSZXBsaWNhKCkpCisgICAgICAgIHJlbW92ZU9j
Y2x1c2lvbk92ZXJNb3ZlZFBpeGVscyhvbGRUYXJnZXQsIG5ld1RhcmdldCwgb2xkVGFyZ2V0LT5y
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgordm9pZCBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpyZW1vdmVPY2NsdXNpb25PdmVyTW92
ZWRQaXhlbHMoY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIG9sZFRhcmdldCwgY29uc3QgUmVuZGVy
U3VyZmFjZVR5cGUqIG5ld1RhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRhcmdl
dFRyYW5zZm9ybSkKK3sKKyAgICBpZiAoIW9sZFRhcmdldC0+YmFja2dyb3VuZEZpbHRlcnMoKS5o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhl
IGJhY2tncm91bmQgZmlsdGVyIG9uIG9sZFRhcmdldCB3aWxsIG1vdmUgcGl4ZWxzIHRoYXQgYXJl
IHJlYWQgZnJvbSBuZXdUYXJnZXQsIHNpbmNlIG5ld1RhcmdldCBpcyBpdHMgcGFyZW50IHN1cmZh
Y2UuCisgICAgLy8gU28gd2Ugb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IG9jY2x1c2lvbiB0aGF0
IHdpbGwgYWZmZWN0IG5ld1RhcmdldC4gU2luY2UgbmV3VGFyZ2V0IGlzIG5vdyBvbiB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgdGhhdAorICAgIC8vIGlzIHdoYXQgd2UgbmVlZCB0byB3b3JyeSBhYm91
dC4gVGhpbmdzIGJlbG93IGl0IGluIHRoZSBzdGFjayB3aWxsIG5vdCBiZSB1c2VkIHRvIG9jY2x1
ZGUgbmV3VGFyZ2V0LiBBbnkgb3RoZXIgdGhpbmdzIGFkZGVkCisgICAgLy8gdG8gdGhlIHN0YWNr
IGFmdGVyIHRoaXMgcG9pbnQgd2lsbCBiZSBiZWxvdyB0aGUgYmFja2dyb3VuZCBmaWx0ZXIsIHNv
IGFueSBvY2NsdXNpb24gdGhleSBhZGQgd2lsbCBiZSBmcm9tIHBpeGVscyB0aGF0IGFyZQorICAg
IC8vIHJlYWQgaW4gdGhlIGZpbHRlciBpbiBwbGFjZSBvZiB3aGF0IHRoZXkgb2NjbHVkZS4KKwor
ICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCB1c2UgdGhlIG9sZFRhcmdldCdzICJib3VuZHMuc3Vi
dHJhY3Qob2NjbHVzaW9uKSIgaGVyZSBpbnN0ZWFkIG9mIGp1c3QgaXRzIGJvdW5kcyBpZiBuZWVk
ZWQuCisKKyAgICBib29sIHRhcmdldENsaXBwZWQ7CisgICAgSW50UmVjdCBib3VuZHNJbk5ld1Rh
cmdldCA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwUXVhZCh0YXJnZXRUcmFuc2Zv
cm0sIEZsb2F0UXVhZChGbG9hdFJlY3Qob2xkVGFyZ2V0LT5jb250ZW50UmVjdCgpKSksIHRhcmdl
dENsaXBwZWQpLmJvdW5kaW5nQm94KCkpOworCisgICAgaWYgKHRhcmdldENsaXBwZWQpIHsKKyAg
ICAgICAgLy8gSWYgY2xpcHBlZCB0aGVuIHdlIGRvbid0IGtub3cgd2hhdCBwaXhlbHMgbmVlZCB0
byBiZSBwYWludGVkL2RyYXduIHRvIGJlIHVzZWQgaW4gdGhlIGJhY2tncm91bmQgZmlsdGVyLCBz
byB3ZSBqdXN0IGRlc3Ryb3kgYWxsIG9jY2x1c2lvbiBvZiB0aGUgdGFyZ2V0LgorICAgICAgICBt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCA9IFJlZ2lvbigpOworICAgICAgICBtX3N0
YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IFJlZ2lvbigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaW50IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdDsKKyAgICBvbGRUYXJn
ZXQtPmJhY2tncm91bmRGaWx0ZXJzKCkuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxl
ZnQpOworICAgIGJvdW5kc0luTmV3VGFyZ2V0Lm1vdmUoLWxlZnQsIC10b3ApOworICAgIGJvdW5k
c0luTmV3VGFyZ2V0LmV4cGFuZChsZWZ0ICsgcmlnaHQsIHRvcCArIGJvdHRvbSk7CisKKyAgICBp
ZiAoIW9sZFRhcmdldC0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIGJvdW5kc0luTmV3
VGFyZ2V0LmludGVyc2VjdChvbGRUYXJnZXQtPmNsaXBSZWN0KCkpOworCisgICAgYm9vbCBzY3Jl
ZW5DbGlwcGVkOworICAgIEludFJlY3QgYm91bmRzSW5TY3JlZW4gPSBlbmNsb3NpbmdJbnRSZWN0
KENDTWF0aFV0aWw6Om1hcFF1YWQobmV3VGFyZ2V0LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBG
bG9hdFF1YWQoRmxvYXRSZWN0KGJvdW5kc0luTmV3VGFyZ2V0KSksIHNjcmVlbkNsaXBwZWQpLmJv
dW5kaW5nQm94KCkpOworCisgICAgaWYgKHNjcmVlbkNsaXBwZWQpIHsKKyAgICAgICAgLy8gSWYg
Y2xpcHBlZCB0aGVuIHdlIGRvbid0IGtub3cgd2hhdCBwaXhlbHMgbmVlZCB0byBiZSBwYWludGVk
L2RyYXduIHRvIGJlIHVzZWQgaW4gdGhlIGJhY2tncm91bmQgZmlsdGVyLCBzbyB3ZSBqdXN0IGRl
c3Ryb3kgYWxsIG9jY2x1c2lvbiBvZiB0aGUgdGFyZ2V0LgorICAgICAgICBtX3N0YWNrLmxhc3Qo
KS5vY2NsdXNpb25JblRhcmdldCA9IFJlZ2lvbigpOworICAgICAgICBtX3N0YWNrLmxhc3QoKS5v
Y2NsdXNpb25JblNjcmVlbiA9IFJlZ2lvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQuc3VidHJhY3QoYm91bmRzSW5OZXdU
YXJnZXQpOworICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuLnN1YnRyYWN0KGJv
dW5kc0luU2NyZWVuKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgpAQCAtNDIz
LDYgKzQ3Miw3IEBAIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNo
cm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpsZWF2CiB0ZW1wbGF0ZSB2b2lkIENDT2Nj
bHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6
ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbmV3
VGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpmaW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2Uo
Y29uc3QgTGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIsIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogZmluaXNoZWRUYXJnZXQpOwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OmxlYXZlVG9UYXJnZXRS
ZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbmV3VGFyZ2V0KTsKK3Rl
bXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0+OjpyZW1vdmVPY2NsdXNpb25PdmVyTW92ZWRQaXhlbHMoY29uc3QgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBvbGRUYXJnZXQsIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogbmV3VGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGFyZ2V0VHJhbnNmb3Jt
KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjb25zdCBMYXll
ckNocm9taXVtKik7CiB0ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6b2NjbHVkZWQoY29uc3QgTGF5ZXJDaHJv
bWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKIHRlbXBsYXRlIEludFJl
Y3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKQEAgLTQzNSw2ICs0ODUsNyBAQCB0ZW1wbGF0
ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46OmxlYXZlTGF5ZXIoYwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPEND
TGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29u
c3QgQ0NSZW5kZXJTdXJmYWNlKiBuZXdUYXJnZXQpOwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpmaW5pc2hlZFRhcmdl
dFJlbmRlclN1cmZhY2UoY29uc3QgQ0NMYXllckltcGwqIG93bmluZ0xheWVyLCBjb25zdCBDQ1Jl
bmRlclN1cmZhY2UqIGZpbmlzaGVkVGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6bGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UoY29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBuZXdUYXJnZXQpOwordGVtcGxhdGUg
dm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+
OjpyZW1vdmVPY2NsdXNpb25PdmVyTW92ZWRQaXhlbHMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBv
bGRUYXJnZXQsIGNvbnN0IENDUmVuZGVyU3VyZmFjZSogbmV3VGFyZ2V0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdGFyZ2V0VHJhbnNmb3JtKTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6bWFya09jY2x1ZGVk
QmVoaW5kTGF5ZXIoY29uc3QgQ0NMYXllckltcGwqKTsKIHRlbXBsYXRlIGJvb2wgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6b2NjbHVkZWQoY29u
c3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1w
bGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVy
U3VyZmFjZT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBDQ0xheWVySW1wbCosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmgKaW5kZXggMjcwNWM2YjEzMzFkZmQ5NGZiNWE4M2Y3MDZjYjQxOGZiZTFhYmI3OS4uZTU4
NDhkYzk3Zjc4YjM0Mjg3YWUzNzkwZTk0MzY0ZTlkZmYyZmFkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmgKQEAgLTEwOCw2ICsxMDgsOCBAQCBwcml2YXRlOgogICAgIC8vIEFk
ZCB0aGUgbGF5ZXIncyBvY2NsdXNpb24gdG8gdGhlIHRyYWNrZWQgc3RhdGUuCiAgICAgdm9pZCBt
YXJrT2NjbHVkZWRCZWhpbmRMYXllcihjb25zdCBMYXllclR5cGUqKTsKIAorICAgIHZvaWQgcmVt
b3ZlT2NjbHVzaW9uT3Zlck1vdmVkUGl4ZWxzKGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBvbGRU
YXJnZXQsIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBuZXdUYXJnZXQsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0YXJnZXRUcmFuc2Zvcm0pOworCiAgICAgSW50UmVjdCBtX3NjaXNzb3JS
ZWN0SW5TY3JlZW5TcGFjZTsKICAgICBPd25QdHI8Q0NPdmVyZHJhd01ldHJpY3M+IG1fb3ZlcmRy
YXdNZXRyaWNzOwogICAgIGJvb2wgbV91c2VQYWludFRyYWNraW5nOyAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgd2hlbiBwYWludCB0cmFja2luZyBpcyBvbiBmb3IgcGFpbnQgY3VsbGluZy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRl
c3QuY3BwCmluZGV4IDQxZmI1YTUxZjU0ZTZlNTJmNTJlZjFlMWQyYjlkNzY5NjJiZTAxYmUuLmU5
MjgwY2FhOWE4YTQ1M2VhZmUzMzU3YWYwNmNhMzU1YWJkYzRiMzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApA
QCAtMjM4Nyw4ICsyMzg3LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBvY2NsdXNpb24uc2V0TGF5
ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKIAogICAgICAgICAvLyB8
dG9wbW9zdHwgb2NjbHVkZXMgZXZlcnl0aGluZyBwYXJ0aWFsbHkgc28gd2Uga25vdyBvY2NsdXNp
b24gaXMgaGFwcGVuaW5nIGF0IGFsbC4KLSAgICAgICAgdGhpcy0+ZW50ZXJMYXllcih0b3Btb3N0
LCBvY2NsdXNpb24pOwotICAgICAgICB0aGlzLT5sZWF2ZUxheWVyKHRvcG1vc3QsIG9jY2x1c2lv
bik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIodG9wbW9zdCwgb2NjbHVzaW9uKTsKIAogICAg
ICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDgwLCA1MCksIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwogICAgICAgICBFWFBFQ1RfRVEoMXUsIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwpAQCAtMjQy
MSw0ICsyNDIwLDI1NCBAQCBwcm90ZWN0ZWQ6CiAKIEFMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0U3VyZmFjZUNoaWxkT2ZDbGlwcGluZ1N1cmZhY2UpOwog
Cit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+CitjbGFzcyBDQ09jY2x1
c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVy
IDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9wYXF1ZUxheWVycz4gewor
cHJvdGVjdGVkOgorICAgIHZvaWQgcnVuTXlUZXN0KCkKKyAgICB7CisgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOworICAgICAgICBzY2FsZUJ5SGFsZi5zY2FsZSgwLjUp
OworCisgICAgICAgIC8vIE1ha2UgYSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYSwgZWFjaCA1MHg1
MCwgdGhhdCBhcmUgY29tcGxldGVseSBzdXJyb3VuZGVkIGJ5IG9wYXF1ZSBsYXllcnMgd2hpY2gg
YXJlIGFib3ZlIHRoZW0gaW4gdGhlIHotb3JkZXIuCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGlz
IHNjYWxlZCB0byB0ZXN0IHRoYXQgdGhlIHBpeGVsIG1vdmluZyBpcyBkb25lIGluIHRoZSB0YXJn
ZXQgc3BhY2UsIHdoZXJlIHRoZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBhcHBsaWVkLCBidXQgdGhl
IHN1cmZhY2UKKyAgICAgICAgLy8gYXBwZWFycyBhdCA1MCwgNTAgYW5kIHRoZSByZXBsaWNhIGF0
IDI1MCwgNTAuCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJl
bnQgPSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDMwMCwgMTUwKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5
cGUqIGZpbHRlcmVkU3VyZmFjZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHNj
YWxlQnlIYWxmLCBGbG9hdFBvaW50KDUwLCA1MCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7
CisgICAgICAgIHRoaXMtPmNyZWF0ZVJlcGxpY2FMYXllcihmaWx0ZXJlZFN1cmZhY2UsIHRoaXMt
PmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDMwMCwgMCksIEludFNpemUoKSk7CisgICAgICAg
IHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMSA9IHRoaXMtPmNyZWF0
ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDMwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6Okxh
eWVyVHlwZSogb2NjbHVkaW5nTGF5ZXIyID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVu
dCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgzMDAs
IDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGlu
Z0xheWVyMyA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsKKyAgICAg
ICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI0ID0gdGhpcy0+Y3Jl
YXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MTAwLCA1MCksIEludFNpemUoMTAwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBl
czo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjUgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIo
cGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyNTAsIDUwKSwgSW50U2l6
ZSg1MCwgNTApLCB0cnVlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93
biBhIHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAg
ZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShM
ZW5ndGgoMTAsIFdlYkNvcmU6OkZpeGVkKSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7CisgICAg
ICAgIGZpbHRlcmVkU3VyZmFjZS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisKKyAg
ICAgICAgLy8gU2F2ZSB0aGUgZGlzdGFuY2Ugb2YgaW5mbHVlbmNlIGZvciB0aGUgYmx1ciBlZmZl
Y3QuCisgICAgICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91
dHNldExlZnQ7CisgICAgICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJp
Z2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQpOworCisgICAgICAgIHRoaXMtPmNhbGNEcmF3
RXRjKHBhcmVudCk7CisKKyAgICAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcldpdGhTY2lzc29y
PHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUsIHR5cGVuYW1lIFR5cGVzOjpSZW5kZXJTdXJmYWNl
VHlwZT4gb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgICAgICBvY2Ns
dXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwor
ICAgICAgICAvLyBUaGVzZSBsYXllcnMgb2NjbHVkZSBwaXhlbHMgZGlyZWN0bHkgYmVzaWRlIHRo
ZSBmaWx0ZXJlZFN1cmZhY2UuIEJlY2F1c2UgZmlsdGVyZWQgc3VyZmFjZSBibGVuZHMgcGl4ZWxz
IGluIGEgcmFkaXVzLCBpdCB3aWxsCisgICAgICAgIC8vIG5lZWQgdG8gc2VlIHNvbWUgb2YgdGhl
IHBpeGVscyAodXAgdG8gcmFkaXVzIGZhcikgdW5kZXJuZWF0aCB0aGUgb2NjbHVkaW5nTGF5ZXJz
LgorICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyNSwgb2NjbHVzaW9uKTsK
KyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjQsIG9jY2x1c2lvbik7Cisg
ICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXIzLCBvY2NsdXNpb24pOworICAg
ICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyMiwgb2NjbHVzaW9uKTsKKyAgICAg
ICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjEsIG9jY2x1c2lvbik7CisKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1
c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisg
ICAgICAgIC8vIEV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGUgc3VyZmFjZS9yZXBsaWNhIGlzIG9jY2x1
ZGVkIGJ1dCB0aGUgc3VyZmFjZS9yZXBsaWNhIGl0c2VsZiBpcyBub3QuCisgICAgICAgIHRoaXMt
PmVudGVyTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDEsIDAsIDk5LCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgxLCAwLCAxMDAsIDEwMCkpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAxLCAxMDAsIDk5KSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgMSwgMTAwLCAxMDAp
KSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgOTksIDEwMCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KC0xLCAw
LCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAxMDAs
IDk5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIElu
dFJlY3QoMCwgLTEsIDEwMCwgMTAwKSkpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMzAwICsgMSwgMCwgOTksIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
ZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDMwMCArIDEsIDAsIDEwMCwgMTAwKSkpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwMCArIDAsIDEsIDEwMCwgOTkpLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgzMDAgKyAwLCAx
LCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMDAgKyAwLCAw
LCA5OSwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZh
Y2UsIEludFJlY3QoMzAwIC0gMSwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMzAwICsgMCwgMCwgMTAwLCA5OSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDMwMCArIDAsIC0xLCAxMDAsIDEwMCkp
KTsKKyAgICAgICAgdGhpcy0+bGVhdmVMYXllcihmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7
CisKKyAgICAgICAgLy8gVGhlIGZpbHRlcmVkIGxheWVyL3JlcGxpY2EgZG9lcyBub3Qgb2NjbHVk
ZS4KKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1
c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvY2NsdXNpb24u
b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MHUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisKKyAgICAgICAgLy8gVGhlIHN1cmZhY2UgaGFzIGEgYmFja2dyb3VuZCBibHVyLCBzbyBpdCBu
ZWVkcyBwaXhlbHMgdGhhdCBhcmUgY3VycmVudGx5IGNvbnNpZGVyZWQgb2NjbHVkZWQgaW4gb3Jk
ZXIgdG8gYmUgZHJhd24uIFNvIHRoZSBwaXhlbHMKKyAgICAgICAgLy8gaXQgbmVlZHMgc2hvdWxk
IGJlIHJlbW92ZWQgc29tZSB0aGUgb2NjbHVkZWQgYXJlYSBzbyB0aGF0IHdoZW4gd2UgZ2V0IHRv
IHRoZSBwYXJlbnQgdGhleSBhcmUgZHJhd24uCisgICAgICAgIHRoaXMtPnZpc2l0Q29udHJpYnV0
aW5nU3VyZmFjZShmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgdGhpcy0+
ZW50ZXJMYXllcihwYXJlbnQsIG9jY2x1c2lvbik7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
LmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5T
Y3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2Uo
KS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
VGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICBJbnRSZWN0IG91dHNl
dFJlY3Q7CisgICAgICAgIEludFJlY3QgdGVzdFJlY3Q7CisKKyAgICAgICAgLy8gTm90aGluZyBp
biB0aGUgYmx1ciBvdXRzZXRzIGZvciB0aGUgZmlsdGVyZWRTdXJmYWNlIGlzIG9jY2x1ZGVkLgor
ICAgICAgICBvdXRzZXRSZWN0ID0gSW50UmVjdCg1MCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0
VG9wLCA1MCArIG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRz
ZXRCb3R0b20pOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIFN0dWZmIG91dHNpZGUgdGhlIGJsdXIgb3V0
c2V0cyBpcyBzdGlsbCBvY2NsdWRlZCB0aG91Z2guCisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0
UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChvdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwg
dGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0
UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAg
ICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoLTEsIDApOwor
ICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91
dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVj
dCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1v
dmUoMCwgLTEpOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIE5vdGhpbmcgaW4gdGhlIGJsdXIgb3V0c2V0
cyBmb3IgdGhlIGZpbHRlcmVkU3VyZmFjZSdzIHJlcGxpY2EgaXMgb2NjbHVkZWQuCisgICAgICAg
IG91dHNldFJlY3QgPSBJbnRSZWN0KDIwMCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1
MCArIG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0
b20pOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0
ZXN0UmVjdCkpOworCisgICAgICAgIC8vIFN0dWZmIG91dHNpZGUgdGhlIGJsdXIgb3V0c2V0cyBp
cyBzdGlsbCBvY2NsdWRlZCB0aG91Z2guCisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsK
KyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChv
dXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJl
Y3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5l
eHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0
UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoLTEsIDApOworICAgICAg
ICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJl
Y3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOwor
ICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwg
LTEpOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0
ZXN0UmVjdCkpOworICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVTVChDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmls
dGVyKTsKKwordGVtcGxhdGU8Y2xhc3MgVHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3Mg
Q0NPY2NsdXNpb25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3Vu
ZEZpbHRlcldpdGhDbGlwIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9w
YXF1ZUxheWVycz4geworcHJvdGVjdGVkOgorICAgIHZvaWQgcnVuTXlUZXN0KCkKKyAgICB7Cisg
ICAgICAgIC8vIE1ha2UgYSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYSwgZWFjaCA1MHg1MCwgdGhh
dCBhcmUgY29tcGxldGVseSBzdXJyb3VuZGVkIGJ5IG9wYXF1ZSBsYXllcnMgd2hpY2ggYXJlIGFi
b3ZlIHRoZW0gaW4gdGhlIHotb3JkZXIuCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50
TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMTUwKSk7CisgICAgICAgIC8vIFdlIHN0
aWNrIHRoZSBmaWx0ZXJlZCBzdXJmYWNlIGluc2lkZSBhIGNsaXBwaW5nIHN1cmZhY2Ugc28gdGhh
dCB3ZSBjYW4gbWFrZSBzdXJlIHRoZSBjbGlwIGlzIGhvbm9yZWQgd2hlbiBleHBvc2luZyBwaXhl
bHMgZm9yCisgICAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGZpbHRlci4KKyAgICAgICAgdHlwZW5h
bWUgVHlwZXM6OkxheWVyVHlwZSogY2xpcHBpbmdTdXJmYWNlID0gdGhpcy0+Y3JlYXRlU3VyZmFj
ZShwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDMwMCwgMTAwKSk7CisgICAgICAgIGNsaXBwaW5nU3VyZmFjZS0+c2V0TWFza3NUb0JvdW5kcyh0
cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogZmlsdGVyZWRTdXJmYWNl
ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKGNsaXBwaW5nU3VyZmFjZSwgdGhpcy0+aWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCBmYWxzZSk7Cisg
ICAgICAgIHRoaXMtPmNyZWF0ZVJlcGxpY2FMYXllcihmaWx0ZXJlZFN1cmZhY2UsIHRoaXMtPmlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDE1MCwgMCksIEludFNpemUoKSk7CisgICAgICAgIHR5
cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMSA9IHRoaXMtPmNyZWF0ZURy
YXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDMwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVy
VHlwZSogb2NjbHVkaW5nTGF5ZXIyID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwg
dGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgzMDAsIDUw
KSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xh
eWVyMyA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsKKyAgICAgICAg
dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI0ID0gdGhpcy0+Y3JlYXRl
RHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMTAw
LCA1MCksIEludFNpemUoMTAwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6
TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjUgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFy
ZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyNTAsIDUwKSwgSW50U2l6ZSg1
MCwgNTApLCB0cnVlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93biBh
IHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmls
dGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoMTAsIFdlYkNvcmU6OkZpeGVkKSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7CisgICAgICAg
IGZpbHRlcmVkU3VyZmFjZS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICAg
ICAgLy8gU2F2ZSB0aGUgZGlzdGFuY2Ugb2YgaW5mbHVlbmNlIGZvciB0aGUgYmx1ciBlZmZlY3Qu
CisgICAgICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNl
dExlZnQ7CisgICAgICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0
LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQpOworCisgICAgICAgIHRoaXMtPmNhbGNEcmF3RXRj
KHBhcmVudCk7CisKKyAgICAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcldpdGhTY2lzc29yPHR5
cGVuYW1lIFR5cGVzOjpMYXllclR5cGUsIHR5cGVuYW1lIFR5cGVzOjpSZW5kZXJTdXJmYWNlVHlw
ZT4gb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgICAgICBvY2NsdXNp
b24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKworICAg
ICAgICAvLyBUaGVzZSBsYXllcnMgb2NjbHVkZSBwaXhlbHMgZGlyZWN0bHkgYmVzaWRlIHRoZSBm
aWx0ZXJlZFN1cmZhY2UuIEJlY2F1c2UgZmlsdGVyZWQgc3VyZmFjZSBibGVuZHMgcGl4ZWxzIGlu
IGEgcmFkaXVzLCBpdCB3aWxsCisgICAgICAgIC8vIG5lZWQgdG8gc2VlIHNvbWUgb2YgdGhlIHBp
eGVscyAodXAgdG8gcmFkaXVzIGZhcikgdW5kZXJuZWF0aCB0aGUgb2NjbHVkaW5nTGF5ZXJzLgor
ICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyNSwgb2NjbHVzaW9uKTsKKyAg
ICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjQsIG9jY2x1c2lvbik7CisgICAg
ICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXIzLCBvY2NsdXNpb24pOworICAgICAg
ICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyMiwgb2NjbHVzaW9uKTsKKyAgICAgICAg
dGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjEsIG9jY2x1c2lvbik7CisKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1
c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAg
ICAgIC8vIEV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGUgc3VyZmFjZS9yZXBsaWNhIGlzIG9jY2x1ZGVk
IGJ1dCB0aGUgc3VyZmFjZS9yZXBsaWNhIGl0c2VsZiBpcyBub3QuCisgICAgICAgIHRoaXMtPmVu
dGVyTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDEsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDEsIDAsIDUwLCA1MCkpKTsKKyAgICAgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAxLCA1MCwgNDkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgwLCAxLCA1MCwgNTApKSk7CisgICAg
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgNDksIDUwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoLTEsIDAsIDUwLCA1MCkp
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA1MCwgNDkpLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgwLCAtMSwg
NTAsIDUwKSkpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTUwICsgMSwgMCwg
NDksIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2Us
IEludFJlY3QoMTUwICsgMSwgMCwgNTAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDE1MCArIDAsIDEsIDUwLCA0OSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDAsIDEsIDUwLCA1MCkpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxNTAgKyAwLCAwLCA0OSwgNTApLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgxNTAgLSAxLCAw
LCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTUwICsgMCwgMCwg
NTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2Us
IEludFJlY3QoMTUwICsgMCwgLTEsIDUwLCA1MCkpKTsKKyAgICAgICAgdGhpcy0+bGVhdmVMYXll
cihmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgLy8gVGhlIGZpbHRlcmVk
IGxheWVyL3JlcGxpY2EgZG9lcyBub3Qgb2NjbHVkZS4KKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDAsIDAsIDAsIDApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCku
Ym91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRh
cmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gVGhlIHN1cmZhY2Ug
aGFzIGEgYmFja2dyb3VuZCBibHVyLCBzbyBpdCBuZWVkcyBwaXhlbHMgdGhhdCBhcmUgY3VycmVu
dGx5IGNvbnNpZGVyZWQgb2NjbHVkZWQgaW4gb3JkZXIgdG8gYmUgZHJhd24uIFNvIHRoZSBwaXhl
bHMKKyAgICAgICAgLy8gaXQgbmVlZHMgc2hvdWxkIGJlIHJlbW92ZWQgc29tZSB0aGUgb2NjbHVk
ZWQgYXJlYSBzbyB0aGF0IHdoZW4gd2UgZ2V0IHRvIHRoZSBwYXJlbnQgdGhleSBhcmUgZHJhd24u
CisgICAgICAgIHRoaXMtPnZpc2l0Q29udHJpYnV0aW5nU3VyZmFjZShmaWx0ZXJlZFN1cmZhY2Us
IG9jY2x1c2lvbik7CisKKyAgICAgICAgdGhpcy0+ZW50ZXJDb250cmlidXRpbmdTdXJmYWNlKGNs
aXBwaW5nU3VyZmFjZSwgb2NjbHVzaW9uKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91
bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVl
blNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIEludFJlY3Qgb3V0c2V0UmVjdDsK
KyAgICAgICAgSW50UmVjdCBjbGlwcGVkT3V0c2V0UmVjdDsKKyAgICAgICAgSW50UmVjdCB0ZXN0
UmVjdDsKKworICAgICAgICAvLyBOb3RoaW5nIGluIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRz
IGZvciB0aGUgZmlsdGVyZWRTdXJmYWNlIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRSZWN0
ID0gSW50UmVjdCg1MCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNldExl
ZnQgKyBvdXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgICAg
ICBjbGlwcGVkT3V0c2V0UmVjdCA9IGludGVyc2VjdGlvbihvdXRzZXRSZWN0LCBJbnRSZWN0KDAs
IDAsIDMwMCwgMTAwKSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIFN0dWZm
IG91dHNpZGUgdGhlIChjbGlwcGVkKSBibHVyIG91dHNldHMgaXMgc3RpbGwgb2NjbHVkZWQgdGhv
dWdoLgorICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0LmV4
cGFuZCgxLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkp
OworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0LmV4cGFu
ZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOwor
ICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoLTEs
IDApOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNs
aXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0
OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKDAsIC0xKTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5k
KDAsIDEpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisK
KyAgICAgICAgLy8gTm90aGluZyBpbiB0aGUgKGNsaXBwZWQpIGJsdXIgb3V0c2V0cyBmb3IgdGhl
IGZpbHRlcmVkU3VyZmFjZSdzIHJlcGxpY2EgaXMgb2NjbHVkZWQuCisgICAgICAgIG91dHNldFJl
Y3QgPSBJbnRSZWN0KDIwMCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNl
dExlZnQgKyBvdXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAg
ICAgICBjbGlwcGVkT3V0c2V0UmVjdCA9IGludGVyc2VjdGlvbihvdXRzZXRSZWN0LCBJbnRSZWN0
KDAsIDAsIDMwMCwgMTAwKSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIFN0
dWZmIG91dHNpZGUgdGhlIChjbGlwcGVkKSBibHVyIG91dHNldHMgaXMgc3RpbGwgb2NjbHVkZWQg
dGhvdWdoLgorICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0
LmV4cGFuZCgxLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3Qs
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVj
dCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0LmV4
cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkp
OworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUo
LTEsIDApOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRS
ZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKDAsIC0xKTsKKyAgICAgICAgdGVzdFJlY3QuZXhw
YW5kKDAsIDEpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7
CisgICAgfQorfTsKKworQUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJh
Y2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXJXaXRoQ2xp
cCk7CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139301</attachid>
            <date>2012-04-27 16:21:14 -0700</date>
            <delta_ts>2012-04-27 19:27:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84317-20120427162113.patch</filename>
            <type>text/plain</type>
            <size>50342</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2RiOTRhNzRiOWQ3
MWJhMDEwODM1OTlhMjFjYTQ2YTZlNzgwZjc2Li5mZjg4YTU2MzRkODM5NWQwMmEyMTA2Mzg5NzIx
OTA3YTZlOGY5MzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNC0yNyAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEg
YmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaDoKKwog
MjAxMi0wNC0yNSAgR2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbQ2hyb21pdW1dIEZpeCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljIGluIFBs
YXRmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMmIyOTIzZmY1YmNiNzQwNmIwZDY4Mzk4NTk3OWIzYzhiNjRh
MjQyZi4uMDBhNGNhMDdmYTQ0ZGRmYTY3ODU5ZDRjNTA2Mzg3ZmJjYmNiNzk2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTA0LTI3ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRG9uJ3Qgb2NjbHVkZSBwaXhlbHMgaW4g
YSBzdXJmYWNlIHRoYXQgYXJlIG5lZWRlZCBmb3IgYSBiYWNrZ3JvdW5kIGZpbHRlciBibHVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDMxNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsdXIgZmlsdGVy
cyBtb3ZlIHBpeGVscyBhcm91bmQsIHNvIGEgcGl4ZWwgY2FuIGluZmx1ZW5jZSB0aGUgdmFsdWUg
b2YKKyAgICAgICAgcGl4ZWxzIGF0IHNvbWUgZGlzdGFuY2UgYXdheS4gSWYgYSBwaXhlbCBpcyBu
b3Qgb2NjbHVkZWQsIHRoZW4gYWxsCisgICAgICAgIHBpeGVscyB3aXRoaW4gdGhlIHJhZGl1cyBv
ZiB0aGUgYmx1ciBtYXkgaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiB0aGF0CisgICAgICAgIHBpeGVs
LCBzbyB0aGV5IHNob3VsZCBhbHNvIHN0YXkgdW5vY2NsdWRlZC4KKworICAgICAgICBGb3IgYmFj
a2dyb3VuZCBmaWx0ZXJzLCB0aGUgcGl4ZWxzIGFyZSByZWFkIGZyb20gdGhlIGZpbHRlcidzIHRh
cmdldAorICAgICAgICBzdXJmYWNlLCBzbyB3ZSByZW1vdmUgb2NjbHVzaW9uIGZyb20gdGhhdCB0
YXJnZXQgc3VyZmFjZSBmcm9tIHBpeGVscworICAgICAgICB0aGF0IHdpbGwgYmx1ciBpbnRvIHZp
c2libGUgcGl4ZWxzLgorCisgICAgICAgIE9jY2x1c2lvbiBhZGRlZCBiZWxvdyBhIGJhY2tncm91
bmQgZmlsdGVyIG5lZWRzIHRvIGJlIHJlZHVjZWQgYnkKKyAgICAgICAgcGl4ZWxzIG91dHNpZGUg
dGhlIG9jY2x1c2lvbiB0aGF0IG1vdmUgaW50byB0aGUgb2NjbHVzaW9uIGFuZAorICAgICAgICBj
YXVzZSBpdCB0byBiZWNvbWUgbm9uLW9wYXF1ZS4KKworICAgICAgICBVbml0IHRlc3Q6IENDT2Nj
bHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0
ZXIKKyAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0VHdvQmFja2dyb3Vu
ZEZpbHRlcnNSZWR1Y2VPY2NsdXNpb25Ud2ljZQorICAgICAgICAgICAgICAgICAgIENDT2NjbHVz
aW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXJX
aXRoQ2xpcAorICAgICAgICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3RSZWR1Y2VP
Y2NsdXNpb25CZWxvd0JhY2tncm91bmRGaWx0ZXIKKyAgICAgICAgICAgICAgICAgICBDQ09jY2x1
c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVzaW9uUGFydGlhbGx5QmVsb3dCYWNrZ3JvdW5kRmls
dGVyCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lv
blRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29tcHV0ZU9j
Y2x1c2lvblJlZHVjZWRSZWN0QmVoaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWR1
Y2VPY2NsdXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6OjphcHBseVJlZHVjZWRPY2NsdXNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6OjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmg6Cisg
ICAgICAgIChPY2NsdXNpb25SZWR1Y2VkUmVjdCk6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlKToKKyAgICAgICAgKFN0YWNrT2JqZWN0KToKKwogMjAxMi0wNC0yNSAgQWxleGlzIE1l
bmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3
ZWQsIGZpeCBXaW5kb3dzIGJ1aWxkIGFmdGVyIHIxMTUyMTUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGY4MTlmZWM1MjYzYTVjNmZjZTU2YTNlNmVmN2FkMzc1MzFlNDAyODQuLjZjOGQ0
YjRkOGViNzU5YmZjNWIyZjk2ZjgyNTA0Yzc3YmNkNmUxZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDQtMjcgIERhbmEgSmFuc2VucyAgPGRhbmFr
akBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBEb24ndCBvY2NsdWRlIHBpeGVs
cyBpbiBhIHN1cmZhY2UgdGhhdCBhcmUgbmVlZGVkIGZvciBhIGJhY2tncm91bmQgZmlsdGVyIGJs
dXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MzE3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0
cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0U3VyZmFjZUNoaWxkT2ZDbGlwcGluZ1N1cmZhY2U6OnJ1bk15VGVz
dCk6CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVk
ZWRGb3JCYWNrZ3JvdW5kRmlsdGVyOjpydW5NeVRlc3QpOgorICAgICAgICAoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RUd29CYWNrZ3JvdW5kRmls
dGVyc1JlZHVjZU9jY2x1c2lvblR3aWNlOjpydW5NeVRlc3QpOgorICAgICAgICAoQ0NPY2NsdXNp
b25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlcldp
dGhDbGlwKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9u
dE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyV2l0aENsaXA6OnJ1bk15VGVz
dCk6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVzaW9uQmVsb3dC
YWNrZ3JvdW5kRmlsdGVyKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVyOjpydW5NeVRlc3QpOgor
ICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvblBhcnRpYWxseUJl
bG93QmFja2dyb3VuZEZpbHRlcik6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25U
cmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvblBhcnRpYWxseUJlbG93QmFja2dyb3VuZEZpbHRlcjo6
cnVuTXlUZXN0KToKKwogMjAxMi0wNC0yNSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBDYWxsIGFjdHVhbE1lbW9yeVVzYWdlTUIgZGly
ZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmls
dGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZpbHRl
ck9wZXJhdGlvbi5oCmluZGV4IDU2MWNhZDNjMmM3ZTRjNmQ3NTgzNWI4ODk0YzIwYjc5NmYxMjEx
ZTUuLmRhNzhjNTUyNTU3NmRlNWIxMjgzNTI2ZTk4MDcwMTQ2Yzk5YTU0NDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgKKysr
IGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaApA
QCAtNzcsNyArNzcsOCBAQCBzdHJ1Y3QgV2ViQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiA6IHB1YmxpYyBXZWJGaWx0ZXJPcGVyYXRpb24gewogICAgICAgICBGaWx0ZXJUeXBl
SW52ZXJ0ID0gNSwKICAgICAgICAgRmlsdGVyVHlwZUJyaWdodG5lc3MgPSA3LAogICAgICAgICBG
aWx0ZXJUeXBlQ29udHJhc3QgPSA4Ci0gICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNh
dXNlIHRoaXMgaXMgbW9yZSBleHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0
aGUgbGF5ZXIuCisgICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNhdXNlIHRoaXMgaXMg
bW9yZSBleHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0aGUgbGF5ZXIsCisg
ICAgICAgIC8vIGFuZCBvcGFjaXR5IGlzIG5vdCBhbGxvd2VkIGZvciBiYWNrZ3JvdW5kIGZpbHRl
cnMuCiAgICAgfTsKIAogICAgIFdlYkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24oRmlsdGVyVHlwZSB0eXBlLCBmbG9hdCBhbW91bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNp
b25UcmFja2VyLmNwcAppbmRleCA0NGE2OGJhNTIxNDA5MjA5MmJjNjBmYWU0MDRkYWNiOTNmOWQ5
MjkyLi4xMTQ2NzNjYWE2NWNkZTFhZWEwOTQ0ZjYzNDk2N2I3MTI5Njc0YjYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lv
blRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKQEAgLTE2OSwxOCArMTY5LDEwNyBAQCB2b2lk
IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Omxl
YXZlVG9UYXJnZXRSZW5kZXJTdQogICAgIFJlZ2lvbiBvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1Rh
cmdldCA9IHRyYW5zZm9ybVN1cmZhY2VPcGFxdWVSZWdpb248UmVuZGVyU3VyZmFjZVR5cGU+KG9s
ZFRhcmdldCwgbV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluVGFyZ2V0LCBvbGRUYXJnZXQt
Pm9yaWdpblRyYW5zZm9ybSgpKTsKICAgICBpZiAob2xkVGFyZ2V0LT5oYXNSZXBsaWNhKCkpCiAg
ICAgICAgIG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0LnVuaXRlKHRyYW5zZm9ybVN1cmZh
Y2VPcGFxdWVSZWdpb248UmVuZGVyU3VyZmFjZVR5cGU+KG9sZFRhcmdldCwgbV9zdGFja1tsYXN0
SW5kZXhdLm9jY2x1c2lvbkluVGFyZ2V0LCBvbGRUYXJnZXQtPnJlcGxpY2FPcmlnaW5UcmFuc2Zv
cm0oKSkpOworICAgIFJlZ2lvbiYgb2xkVGFyZ2V0T2NjbHVzaW9uSW5TY3JlZW4gPSBtX3N0YWNr
W2xhc3RJbmRleF0ub2NjbHVzaW9uSW5TY3JlZW47CisKKyAgICBpZiAoIW9sZFRhcmdldC0+YmFj
a2dyb3VuZEZpbHRlcnMoKS5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkgeworICAgICAgICAv
LyBJZiB0aGUgc3VyZmFjZSBkb2VzIG5vdCBoYXZlIGEgYmFja2dyb3VuZCBmaWx0ZXIgYnV0IGlz
IGJlbG93IG9uZSB0aGF0IGRvZXMsIHRoZW4KKyAgICAgICAgLy8gd2UgbmVlZCB0byByZWR1Y2Ug
anVzdCB0aGlzIGxheWVyJ3Mgb2NjbHVzaW9uIGNvbnRyaWJ1dGlvbiB0byBpdHMgdGFyZ2V0IHN1
cmZhY2UuCisgICAgICAgIC8vIElmIGl0IGRvZXMgaGF2ZSBhIGJhY2tncm91bmQgZmlsdGVyLCB3
ZSBhbHNvIG5lZWQgdG8gcmVkdWNlIGl0cyBvY2NsdXNpb24sIGJ1dCB3ZQorICAgICAgICAvLyBk
byBpdCBiZWxvdyBjb21iaW5lZCB3aXRoIHJlZHVjaW5nIG9jY2x1c2lvbiBvZiBvdGhlciB0aGlu
Z3MgYWJvdmUgdGhlIHN1cmZhY2UuCisgICAgICAgIGFwcGx5UmVkdWNlZE9jY2x1c2lvbihtX3N0
YWNrLmxhc3QoKS5yZWR1Y2VkT2NjbHVzaW9uLCBvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1Rhcmdl
dCwgb2xkVGFyZ2V0T2NjbHVzaW9uSW5TY3JlZW4pOworICAgIH0KIAogICAgIGlmIChzdXJmYWNl
V2lsbEJlQXRUb3BBZnRlclBvcCkgewogICAgICAgICAvLyBNZXJnZSB0aGUgdG9wIG9mIHRoZSBz
dGFjayBkb3duLgotCi0gICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVzaW9uSW5T
Y3JlZW4udW5pdGUobV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluU2NyZWVuKTsKICAgICAg
ICAgbV9zdGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblRhcmdldC51bml0ZShvbGRUYXJn
ZXRPY2NsdXNpb25Jbk5ld1RhcmdldCk7CisgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0u
b2NjbHVzaW9uSW5TY3JlZW4udW5pdGUob2xkVGFyZ2V0T2NjbHVzaW9uSW5TY3JlZW4pOwogICAg
ICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBSZXBs
YWNlIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdpdGggdGhlIG5ldyBwdXNoZWQgc3VyZmFjZS4gQ29w
eSB0aGUgb2NjbHVkZWQgc2NyZWVuIHJlZ2lvbiB0byB0aGUgdG9wLgogICAgICAgICBtX3N0YWNr
Lmxhc3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0OwogICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblRhcmdldCA9IG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0OwogICAgIH0KKwor
ICAgIGlmIChvbGRUYXJnZXQtPmJhY2tncm91bmRGaWx0ZXJzKCkuaGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzKCkpIHsKKyAgICAgICAgVmVjdG9yPE9jY2x1c2lvblJlZHVjZWRSZWN0PiBvbGRUYXJn
ZXRSZWR1Y2VkT2NjbHVzaW9uOworICAgICAgICBPY2NsdXNpb25SZWR1Y2VkUmVjdCBvY2NsdXNp
b25SZWR1Y2VkUmVjdDsKKyAgICAgICAgY29tcHV0ZU9jY2x1c2lvblJlZHVjZWRSZWN0QmVoaW5k
U3VyZmFjZShvbGRUYXJnZXQsIG5ld1RhcmdldCwgb2xkVGFyZ2V0LT5vcmlnaW5UcmFuc2Zvcm0o
KSwgb2xkVGFyZ2V0LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBvY2NsdXNpb25SZWR1Y2VkUmVj
dCk7CisgICAgICAgIG9sZFRhcmdldFJlZHVjZWRPY2NsdXNpb24uYXBwZW5kKG9jY2x1c2lvblJl
ZHVjZWRSZWN0KTsKKyAgICAgICAgaWYgKG9sZFRhcmdldC0+aGFzUmVwbGljYSgpKSB7CisgICAg
ICAgICAgICBjb21wdXRlT2NjbHVzaW9uUmVkdWNlZFJlY3RCZWhpbmRTdXJmYWNlKG9sZFRhcmdl
dCwgbmV3VGFyZ2V0LCBvbGRUYXJnZXQtPnJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSwgb2xkVGFy
Z2V0LT5yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwgb2NjbHVzaW9uUmVkdWNlZFJlY3Qp
OworICAgICAgICAgICAgb2xkVGFyZ2V0UmVkdWNlZE9jY2x1c2lvbi5hcHBlbmQob2NjbHVzaW9u
UmVkdWNlZFJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgYXBwbHlSZWR1Y2VkT2NjbHVzaW9u
KG9sZFRhcmdldFJlZHVjZWRPY2NsdXNpb24sIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFy
Z2V0LCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7CisgICAgICAgIG1fc3RhY2su
bGFzdCgpLnJlZHVjZWRPY2NsdXNpb24uYXBwZW5kKG9sZFRhcmdldFJlZHVjZWRPY2NsdXNpb24p
OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZT4KK3ZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6Y29tcHV0ZU9jY2x1c2lvblJlZHVjZWRSZWN0QmVoaW5kU3VyZmFj
ZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSwgY29uc3QgUmVuZGVyU3VyZmFjZVR5
cGUqIHN1cmZhY2VUYXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0YXJnZXRUcmFu
c2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5UcmFuc2Zvcm0sIE9jY2x1
c2lvblJlZHVjZWRSZWN0JiBvY2NsdXNpb25SZWR1Y2VkUmVjdCkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IGJvdW5kc0luVGFyZ2V0ID0gZW5jbG9zaW5nSW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlw
cGVkUmVjdCh0YXJnZXRUcmFuc2Zvcm0sIEZsb2F0UmVjdChzdXJmYWNlLT5jb250ZW50UmVjdCgp
KSkpOworICAgIGlmICghc3VyZmFjZS0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIGJv
dW5kc0luVGFyZ2V0LmludGVyc2VjdChzdXJmYWNlLT5jbGlwUmVjdCgpKTsKKworICAgIGludCBv
dXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQ7CisgICAgc3Vy
ZmFjZS0+YmFja2dyb3VuZEZpbHRlcnMoKS5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0Umln
aHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisKKyAgICAvLyBUaGUgZmlsdGVyIGNhbiBt
b3ZlIHBpeGVscyBmcm9tIG91dHNpZGUgb2YgdGhlIGNsaXAsIHNvIGFsbG93IGVmZmVjdGVkQXJl
YSB0byBleHBhbmQgb3V0c2lkZSB0aGUgY2xpcC4KKyAgICBib3VuZHNJblRhcmdldC5tb3ZlKC1v
dXRzZXRMZWZ0LCAtb3V0c2V0VG9wKTsKKyAgICBib3VuZHNJblRhcmdldC5leHBhbmQob3V0c2V0
TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworCisgICAgSW50
UmVjdCBib3VuZHNJblNjcmVlbiA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xp
cHBlZFJlY3Qoc3VyZmFjZVRhcmdldC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwgRmxvYXRSZWN0
KGJvdW5kc0luVGFyZ2V0KSkpOworCisgICAgSW50UmVjdCBmaWx0ZXJPdXRzZXRzSW5UYXJnZXQo
LW91dHNldExlZnQsIC1vdXRzZXRUb3AsIG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwgb3V0c2V0
VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICBJbnRSZWN0IGZpbHRlck91dHNldHNJblNjcmVlbiA9
IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3Qoc3VyZmFjZVRhcmdl
dC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwgRmxvYXRSZWN0KGZpbHRlck91dHNldHNJblRhcmdl
dCkpKTsKKworICAgIG9jY2x1c2lvblJlZHVjZWRSZWN0LnBpeGVsRXhwYW5kZWRJblRhcmdldCA9
IGZpbHRlck91dHNldHNJblRhcmdldDsKKyAgICBvY2NsdXNpb25SZWR1Y2VkUmVjdC5lZmZlY3Rl
ZEFyZWFJblRhcmdldCA9IGJvdW5kc0luVGFyZ2V0OworICAgIG9jY2x1c2lvblJlZHVjZWRSZWN0
LnBpeGVsRXhwYW5kZWRJblNjcmVlbiA9IGZpbHRlck91dHNldHNJblNjcmVlbjsKKyAgICBvY2Ns
dXNpb25SZWR1Y2VkUmVjdC5lZmZlY3RlZEFyZWFJblNjcmVlbiA9IGJvdW5kc0luU2NyZWVuOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVkdWNlT2NjbHVzaW9uKGNvbnN0IEludFJlY3QmIGVm
ZmVjdGVkQXJlYSwgY29uc3QgSW50UmVjdCYgcGl4ZWxFeHBhbmRlZCwgUmVnaW9uJiBvY2NsdXNp
b24pCit7CisgICAgaWYgKCFlZmZlY3RlZEFyZWEuaW50ZXJzZWN0cyhvY2NsdXNpb24uYm91bmRz
KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpb24gZWZmZWN0ZWRPY2NsdXNpb24gPSBp
bnRlcnNlY3Qob2NjbHVzaW9uLCBlZmZlY3RlZEFyZWEpOworICAgIFZlY3RvcjxJbnRSZWN0PiBl
ZmZlY3RlZE9jY2x1c2lvblJlY3RzID0gZWZmZWN0ZWRPY2NsdXNpb24ucmVjdHMoKTsKKworICAg
IG9jY2x1c2lvbi5zdWJ0cmFjdChlZmZlY3RlZEFyZWEpOworICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgZWZmZWN0ZWRPY2NsdXNpb25SZWN0cy5zaXplKCk7ICsraikgeworICAgICAgICBJbnRS
ZWN0JiBvY2NsdXNpb25SZWN0ID0gZWZmZWN0ZWRPY2NsdXNpb25SZWN0c1tqXTsKKworICAgICAg
ICAvLyBTaHJpbmsgdGhlIHJlY3QgYnkgZXhwYW5kaW5nIHRoZSBub24tb3BhcXVlIHBpeGVscyBv
dXRzaWRlIHRoZSByZWN0LgorICAgICAgICAvLyBUbyBjb252ZXJ0IHRoZSBwaXhlbEV4cGFuZGVk
IEludFJlY3QgdG8gb3V0c2V0czoKKyAgICAgICAgLy8geCA9IC1sZWZ0T3V0c2V0CisgICAgICAg
IC8vIHdpZHRoID0gbGVmdE91dHNldCArIHJpZ2h0T3V0c2V0CisgICAgICAgIC8vIG1heFggPSB4
ICsgd2lkdGggPSAtbGVmdE91dHNldCArIGxlZnRPdXRzZXQgKyByaWdodE91dHNldCA9IHJpZ2h0
T3V0c2V0CisKKyAgICAgICAgLy8gVGhlIGxlZnRPdXRzZXQgb2YgdGhlIGZpbHRlcnMgbW92ZXMg
cGl4ZWxzIG9uIHRoZSByaWdodCBzaWRlIG9mCisgICAgICAgIC8vIHRoZSBvY2NsdXNpb25SZWN0
IGludG8gaXQsIHNocmlua2luZyBpdHMgcmlnaHQgZWRnZS4KKyAgICAgICAgaW50IHNocmlua0xl
ZnQgPSBvY2NsdXNpb25SZWN0LngoKSA9PSBlZmZlY3RlZEFyZWEueCgpID8gMCA6IHBpeGVsRXhw
YW5kZWQubWF4WCgpOworICAgICAgICBpbnQgc2hyaW5rVG9wID0gb2NjbHVzaW9uUmVjdC55KCkg
PT0gZWZmZWN0ZWRBcmVhLnkoKSA/IDAgOiBwaXhlbEV4cGFuZGVkLm1heFkoKTsKKyAgICAgICAg
aW50IHNocmlua1JpZ2h0ID0gb2NjbHVzaW9uUmVjdC5tYXhYKCkgPT0gZWZmZWN0ZWRBcmVhLm1h
eFgoKSA/IDAgOiAtcGl4ZWxFeHBhbmRlZC54KCk7CisgICAgICAgIGludCBzaHJpbmtCb3R0b20g
PSBvY2NsdXNpb25SZWN0Lm1heFkoKSA9PSBlZmZlY3RlZEFyZWEubWF4WSgpID8gMCA6IC1waXhl
bEV4cGFuZGVkLnkoKTsKKworICAgICAgICBvY2NsdXNpb25SZWN0Lm1vdmUoc2hyaW5rTGVmdCwg
c2hyaW5rVG9wKTsKKyAgICAgICAgb2NjbHVzaW9uUmVjdC5jb250cmFjdChzaHJpbmtMZWZ0ICsg
c2hyaW5rUmlnaHQsIHNocmlua1RvcCArIHNocmlua0JvdHRvbSk7CisKKyAgICAgICAgb2NjbHVz
aW9uLnVuaXRlKG9jY2x1c2lvblJlY3QpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK3ZvaWQgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6YXBwbHlSZWR1Y2VkT2Nj
bHVzaW9uKGNvbnN0IFZlY3RvcjxPY2NsdXNpb25SZWR1Y2VkUmVjdD4mIHJlZHVjZWRPY2NsdXNp
b24sIFJlZ2lvbiYgb2NjbHVzaW9uSW5UYXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5TY3JlZW4p
IGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWR1Y2VkT2NjbHVzaW9uLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IE9jY2x1c2lvblJlZHVjZWRSZWN0JiBvY2NsdXNp
b25SZWR1Y2VkUmVjdCA9IHJlZHVjZWRPY2NsdXNpb25baV07CisgICAgICAgIHJlZHVjZU9jY2x1
c2lvbihvY2NsdXNpb25SZWR1Y2VkUmVjdC5lZmZlY3RlZEFyZWFJblRhcmdldCwgb2NjbHVzaW9u
UmVkdWNlZFJlY3QucGl4ZWxFeHBhbmRlZEluVGFyZ2V0LCBvY2NsdXNpb25JblRhcmdldCk7Cisg
ICAgICAgIHJlZHVjZU9jY2x1c2lvbihvY2NsdXNpb25SZWR1Y2VkUmVjdC5lZmZlY3RlZEFyZWFJ
blNjcmVlbiwgb2NjbHVzaW9uUmVkdWNlZFJlY3QucGl4ZWxFeHBhbmRlZEluU2NyZWVuLCBvY2Ns
dXNpb25JblNjcmVlbik7CisgICAgfQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+
CkBAIC0yNjUsMjMgKzM1NCwyOSBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheQogICAgIGlmIChv
cGFxdWVDb250ZW50cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3Qg
c2Npc3NvckluVGFyZ2V0ID0gbGF5ZXJTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShsYXllcik7
CisgICAgUmVnaW9uIG9wYXF1ZUluVGFyZ2V0OworICAgIFJlZ2lvbiBvcGFxdWVJblNjcmVlbjsK
KworICAgIEludFJlY3Qgc2Npc3NvckluVGFyZ2V0UmVjdCA9IGxheWVyU2Npc3NvclJlY3RJblRh
cmdldFN1cmZhY2UobGF5ZXIpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRhcmdldFRvU2Ny
ZWVuVHJhbnNmb3JtID0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZS0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKTsKKyAgICBib29sIHNjaXNzb3JJblNjcmVlbkNsaXBwZWQ7CisgICAgRmxvYXRRdWFkIHNj
aXNzb3JJblNjcmVlblF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKHRhcmdldFRvU2NyZWVuVHJh
bnNmb3JtLCBGbG9hdFF1YWQoRmxvYXRSZWN0KHNjaXNzb3JJblRhcmdldFJlY3QpKSwgc2Npc3Nv
ckluU2NyZWVuQ2xpcHBlZCk7CisgICAgSW50UmVjdCBzY2lzc29ySW5TY3JlZW5SZWN0ID0gaW50
ZXJzZWN0aW9uKG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBlbmNsb3NlZEludFJlY3Qoc2Np
c3NvckluU2NyZWVuUXVhZC5ib3VuZGluZ0JveCgpKSk7CisKKyAgICAvLyBXZSBtdXN0IGNsaXAg
dGhlIG9jY2x1c2lvbiB3aXRoaW4gdGhlIGxheWVyJ3Mgc2Npc3NvckluVGFyZ2V0IGJvdGggaW4g
dGFyZ2V0IHNwYWNlIGFuZCB3aXRoaW4gc2NyZWVuIHNwYWNlLgorICAgIC8vIElmIHRoZSBzY2lz
c29yIHJlY3QgY2FuJ3QgYmUgbW92ZWQgdG8gc2NyZWVuIHNwYWNlIGFuZCByZW1haW4gcmVjdGls
aW5lYXIsIHRoZW4gd2UgZG9uJ3QgYWRkIGFueSBvY2NsdXNpb24KKyAgICAvLyBpbiBzY3JlZW4g
c3BhY2UuCisKICAgICBpZiAobGF5ZXJUcmFuc2Zvcm1zVG9UYXJnZXRLbm93bihsYXllcikpCi0g
ICAgICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LnVuaXRlKGNvbXB1dGVPY2Ns
dXNpb25CZWhpbmRMYXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9UYXJnZXRTdXJmYWNl
VHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBvcGFxdWVDb250ZW50cywgc2Npc3NvckluVGFy
Z2V0LCBtX3VzZVBhaW50VHJhY2tpbmcpKTsKLQotICAgIC8vIFdlIG11c3QgY2xpcCB0aGUgb2Nj
bHVzaW9uIHdpdGhpbiB0aGUgbGF5ZXIncyBzY2lzc29ySW5UYXJnZXQgd2l0aGluIHNjcmVlbiBz
cGFjZSBhcyB3ZWxsLiBJZiB0aGUgc2Npc3NvciByZWN0IGNhbid0IGJlIG1vdmVkIHRvIHNjcmVl
biBzcGFjZSBhbmQKLSAgICAvLyByZW1haW4gcmVjdGlsaW5lYXIsIHRoZW4gd2UgZG9uJ3QgYWRk
IGFueSBvY2NsdXNpb24gaW4gc2NyZWVuIHNwYWNlLgotCi0gICAgaWYgKGxheWVyVHJhbnNmb3Jt
c1RvU2NyZWVuS25vd24obGF5ZXIpKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRh
cmdldFRvU2NyZWVuVHJhbnNmb3JtID0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZS0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKTsKLSAgICAgICAgYm9vbCBjbGlwcGVkOwotICAgICAgICBGbG9hdFF1YWQg
c2Npc3NvckluU2NyZWVuUXVhZCA9IENDTWF0aFV0aWw6Om1hcFF1YWQodGFyZ2V0VG9TY3JlZW5U
cmFuc2Zvcm0sIEZsb2F0UXVhZChGbG9hdFJlY3Qoc2Npc3NvckluVGFyZ2V0KSksIGNsaXBwZWQp
OwotICAgICAgICAvLyBGSVhNRTogRmluZCBhIHJlY3QgaW50ZXJpb3IgdG8gdGhlIHRyYW5zZm9y
bWVkIHNjaXNzb3IgcXVhZC4KLSAgICAgICAgaWYgKGNsaXBwZWQgfHwgIXNjaXNzb3JJblNjcmVl
blF1YWQuaXNSZWN0aWxpbmVhcigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnRS
ZWN0IHNjaXNzb3JJblNjcmVlblJlY3QgPSBpbnRlcnNlY3Rpb24obV9zY2lzc29yUmVjdEluU2Ny
ZWVuU3BhY2UsIGVuY2xvc2VkSW50UmVjdChzY2lzc29ySW5TY3JlZW5RdWFkLmJvdW5kaW5nQm94
KCkpKTsKLSAgICAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4udW5pdGUoY29t
cHV0ZU9jY2x1c2lvbkJlaGluZExheWVyPExheWVyVHlwZT4obGF5ZXIsIGNvbnRlbnRUb1NjcmVl
blNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBvcGFxdWVDb250ZW50cywgc2Npc3Nv
ckluU2NyZWVuUmVjdCwgbV91c2VQYWludFRyYWNraW5nKSk7Ci0gICAgfQorICAgICAgICBvcGFx
dWVJblRhcmdldCA9IGNvbXB1dGVPY2NsdXNpb25CZWhpbmRMYXllcjxMYXllclR5cGU+KGxheWVy
LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBvcGFx
dWVDb250ZW50cywgc2Npc3NvckluVGFyZ2V0UmVjdCwgbV91c2VQYWludFRyYWNraW5nKTsKKyAg
ICBpZiAobGF5ZXJUcmFuc2Zvcm1zVG9TY3JlZW5Lbm93bihsYXllcikgJiYgIXNjaXNzb3JJblNj
cmVlbkNsaXBwZWQgJiYgc2Npc3NvckluU2NyZWVuUXVhZC5pc1JlY3RpbGluZWFyKCkpCisgICAg
ICAgIG9wYXF1ZUluU2NyZWVuID0gY29tcHV0ZU9jY2x1c2lvbkJlaGluZExheWVyPExheWVyVHlw
ZT4obGF5ZXIsIGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIp
LCBvcGFxdWVDb250ZW50cywgc2Npc3NvckluU2NyZWVuUmVjdCwgbV91c2VQYWludFRyYWNraW5n
KTsKKworICAgIGJvb2wgbGF5ZXJPY2NsdWRlc1dpdGhpbkl0c1RhcmdldFN1cmZhY2UgPSAhbGF5
ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBpZiAobGF5ZXJPY2NsdWRlc1dpdGhpbkl0c1Rhcmdl
dFN1cmZhY2UpCisgICAgICAgIGFwcGx5UmVkdWNlZE9jY2x1c2lvbihtX3N0YWNrLmxhc3QoKS5y
ZWR1Y2VkT2NjbHVzaW9uLCBvcGFxdWVJblRhcmdldCwgb3BhcXVlSW5TY3JlZW4pOworICAgIG1f
c3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LnVuaXRlKG9wYXF1ZUluVGFyZ2V0KTsKKyAg
ICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbi51bml0ZShvcGFxdWVJblNjcmVlbik7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRT
cGFjZVRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGNvbnN0IFJlZ2lvbiYg
b2NjbHVzaW9uKQpAQCAtNDIzLDYgKzUxOCw4IEBAIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpsZWF2CiB0
ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtPjo6ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogbmV3VGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpmaW5pc2hlZFRh
cmdldFJlbmRlclN1cmZhY2UoY29uc3QgTGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIsIGNvbnN0
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogZmluaXNoZWRUYXJnZXQpOwogdGVtcGxhdGUgdm9pZCBD
Q09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1
bT46OmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogbmV3VGFyZ2V0KTsKK3RlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXll
ckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojpjb21wdXRlT2NjbHVzaW9uUmVkdWNl
ZFJlY3RCZWhpbmRTdXJmYWNlKGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSosIGNvbnN0IFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFjZVRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRhcmdldFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVl
blRyYW5zZm9ybSwgT2NjbHVzaW9uUmVkdWNlZFJlY3QmKSBjb25zdDsKK3RlbXBsYXRlIHZvaWQg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0+OjphcHBseVJlZHVjZWRPY2NsdXNpb24oY29uc3QgVmVjdG9yPE9jY2x1c2lvblJlZHVjZWRS
ZWN0PiYgcmVkdWNlZE9jY2x1c2lvbiwgUmVnaW9uJiBvY2NsdXNpb25JblRhcmdldCwgUmVnaW9u
JiBvY2NsdXNpb25JblNjcmVlbikgY29uc3Q7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJh
Y2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bWFya09jY2x1
ZGVkQmVoaW5kTGF5ZXIoY29uc3QgTGF5ZXJDaHJvbWl1bSopOwogdGVtcGxhdGUgYm9vbCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46
Om9jY2x1ZGVkKGNvbnN0IExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkgY29uc3Q7CiB0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNv
bnN0IExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CkBA
IC00MzUsNiArNTMyLDggQEAgdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPEND
TGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpsZWF2ZUxheWVyKGMKIHRlbXBsYXRlIHZvaWQg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6ZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IENDUmVuZGVyU3VyZmFjZSogbmV3VGFyZ2V0KTsK
IHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlPjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IENDTGF5ZXJJbXBs
KiBvd25pbmdMYXllciwgY29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBmaW5pc2hlZFRhcmdldCk7CiB0
ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVy
U3VyZmFjZT46OmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IENDUmVuZGVyU3VyZmFj
ZSogbmV3VGFyZ2V0KTsKK3RlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xh
eWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6Y29tcHV0ZU9jY2x1c2lvblJlZHVjZWRSZWN0QmVo
aW5kU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqLCBjb25zdCBDQ1JlbmRlclN1cmZhY2Uq
IHN1cmZhY2VUYXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0YXJnZXRUcmFuc2Zv
cm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5UcmFuc2Zvcm0sIE9jY2x1c2lv
blJlZHVjZWRSZWN0JikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmFwcGx5UmVkdWNlZE9jY2x1c2lvbihj
b25zdCBWZWN0b3I8T2NjbHVzaW9uUmVkdWNlZFJlY3Q+JiByZWR1Y2VkT2NjbHVzaW9uLCBSZWdp
b24mIG9jY2x1c2lvbkluVGFyZ2V0LCBSZWdpb24mIG9jY2x1c2lvbkluU2NyZWVuKSBjb25zdDsK
IHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY29uc3QgQ0NMYXllckltcGwqKTsK
IHRlbXBsYXRlIGJvb2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlPjo6b2NjbHVkZWQoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OnVub2NjbHVkZWRDb250ZW50UmVjdChj
b25zdCBDQ0xheWVySW1wbCosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T2NjbHVzaW9uVHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKaW5kZXggMjcwNWM2YjEzMzFkZmQ5NGZiNWE4
M2Y3MDZjYjQxOGZiZTFhYmI3OS4uZDA0ZDQzZDYxMDYwM2E5NDc4MTRlYzU5ZTg0OTMwMjQ1ZWZk
ZDc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKQEAgLTczLDEyICs3Mywy
MSBAQCBwdWJsaWM6CiAgICAgUmVnaW9uIGNvbXB1dGVWaXNpYmxlUmVnaW9uSW5TY3JlZW4oKSBj
b25zdCB7IHJldHVybiBzdWJ0cmFjdChSZWdpb24obV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2Up
LCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7IH0KIAogcHJvdGVjdGVkOgorICAg
IHN0cnVjdCBPY2NsdXNpb25SZWR1Y2VkUmVjdCB7CisgICAgICAgIEludFJlY3QgcGl4ZWxFeHBh
bmRlZEluVGFyZ2V0OworICAgICAgICBJbnRSZWN0IGVmZmVjdGVkQXJlYUluVGFyZ2V0OworICAg
ICAgICBJbnRSZWN0IHBpeGVsRXhwYW5kZWRJblNjcmVlbjsKKyAgICAgICAgSW50UmVjdCBlZmZl
Y3RlZEFyZWFJblNjcmVlbjsKKyAgICB9OworCiAgICAgc3RydWN0IFN0YWNrT2JqZWN0IHsKICAg
ICAgICAgU3RhY2tPYmplY3QoKSA6IHN1cmZhY2UoMCkgeyB9CiAgICAgICAgIFN0YWNrT2JqZWN0
KGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlKSA6IHN1cmZhY2Uoc3VyZmFjZSkgeyB9
CiAgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlOwogICAgICAgICBSZWdp
b24gb2NjbHVzaW9uSW5TY3JlZW47CiAgICAgICAgIFJlZ2lvbiBvY2NsdXNpb25JblRhcmdldDsK
KworICAgICAgICBWZWN0b3I8T2NjbHVzaW9uUmVkdWNlZFJlY3Q+IHJlZHVjZWRPY2NsdXNpb247
CiAgICAgfTsKIAogICAgIC8vIFRoZSBzdGFjayBob2xkcyBvY2NsdWRlZCByZWdpb25zIGZvciBz
dWJ0cmVlcyBpbiB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLCBzbyB0aGF0IHdoZW4gd2Ug
bGVhdmUgYSBzdWJ0cmVlIHdlIG1heQpAQCAtMTA4LDYgKzExNywxMiBAQCBwcml2YXRlOgogICAg
IC8vIEFkZCB0aGUgbGF5ZXIncyBvY2NsdXNpb24gdG8gdGhlIHRyYWNrZWQgc3RhdGUuCiAgICAg
dm9pZCBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjb25zdCBMYXllclR5cGUqKTsKIAorICAgIC8v
IENvbXB1dGUgYXJlYXMgd2hlcmUgYWxsIG9jY2x1c2lvbiBpcyByZWR1Y2VkIGJ5IGV4cGFuZGlu
ZyB0aGUgbm9uLW9wYXF1ZSBwaXhlbHMgb3V0c2lkZSB0aGUgb2NjbHVzaW9uLgorICAgIHZvaWQg
Y29tcHV0ZU9jY2x1c2lvblJlZHVjZWRSZWN0QmVoaW5kU3VyZmFjZShjb25zdCBSZW5kZXJTdXJm
YWNlVHlwZSosIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlVGFyZ2V0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGFyZ2V0VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc2NyZWVuVHJhbnNmb3JtLCBPY2NsdXNpb25SZWR1Y2VkUmVjdCYpIGNvbnN0Owor
CisgICAgLy8gUmVkdWNlIG9jY2x1c2lvbiBmcm9tIGZpbHRlcnMgbW92aW5nIHBpeGVscy4KKyAg
ICB2b2lkIGFwcGx5UmVkdWNlZE9jY2x1c2lvbihjb25zdCBWZWN0b3I8T2NjbHVzaW9uUmVkdWNl
ZFJlY3Q+JiByZWR1Y2VkT2NjbHVzaW9uLCBSZWdpb24mIG9jY2x1c2lvbkluVGFyZ2V0LCBSZWdp
b24mIG9jY2x1c2lvbkluU2NyZWVuKSBjb25zdDsKKwogICAgIEludFJlY3QgbV9zY2lzc29yUmVj
dEluU2NyZWVuU3BhY2U7CiAgICAgT3duUHRyPENDT3ZlcmRyYXdNZXRyaWNzPiBtX292ZXJkcmF3
TWV0cmljczsKICAgICBib29sIG1fdXNlUGFpbnRUcmFja2luZzsgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIHdoZW4gcGFpbnQgdHJhY2tpbmcgaXMgb24gZm9yIHBhaW50IGN1bGxpbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0
LmNwcAppbmRleCA0MWZiNWE1MWY1NGU2ZTUyZjUyZWYxZTFkMmI5ZDc2OTYyYmUwMWJlLi4zYzU1
NzNiYmM4NDViZmUwNmMwYmFjMzFlNDY2Y2I1MzIzNTk5OWU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAg
LTIzODcsOCArMjM4Nyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgb2NjbHVzaW9uLnNldExheWVy
U2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CiAKICAgICAgICAgLy8gfHRv
cG1vc3R8IG9jY2x1ZGVzIGV2ZXJ5dGhpbmcgcGFydGlhbGx5IHNvIHdlIGtub3cgb2NjbHVzaW9u
IGlzIGhhcHBlbmluZyBhdCBhbGwuCi0gICAgICAgIHRoaXMtPmVudGVyTGF5ZXIodG9wbW9zdCwg
b2NjbHVzaW9uKTsKLSAgICAgICAgdGhpcy0+bGVhdmVMYXllcih0b3Btb3N0LCBvY2NsdXNpb24p
OworICAgICAgICB0aGlzLT52aXNpdExheWVyKHRvcG1vc3QsIG9jY2x1c2lvbik7CiAKICAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA4MCwgNTApLCBvY2NsdXNpb24ub2NjbHVz
aW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKICAgICAgICAgRVhQRUNUX0VRKDF1LCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKQEAgLTI0MjEs
NCArMjQyMCw0NDUgQEAgcHJvdGVjdGVkOgogCiBBTExfQ0NPQ0NMVVNJT05UUkFDS0VSX1RFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdFN1cmZhY2VDaGlsZE9mQ2xpcHBpbmdTdXJmYWNlKTsKIAor
dGVtcGxhdGU8Y2xhc3MgVHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3MgQ0NPY2NsdXNp
b25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlciA6
IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0PFR5cGVzLCBvcGFxdWVMYXllcnM+IHsKK3By
b3RlY3RlZDoKKyAgICB2b2lkIHJ1bk15VGVzdCgpCisgICAgeworICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBzY2FsZUJ5SGFsZjsKKyAgICAgICAgc2NhbGVCeUhhbGYuc2NhbGUoMC41KTsK
KworICAgICAgICAvLyBNYWtlIGEgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EsIGVhY2ggNTB4NTAs
IHRoYXQgYXJlIGNvbXBsZXRlbHkgc3Vycm91bmRlZCBieSBvcGFxdWUgbGF5ZXJzIHdoaWNoIGFy
ZSBhYm92ZSB0aGVtIGluIHRoZSB6LW9yZGVyLgorICAgICAgICAvLyBUaGUgc3VyZmFjZSBpcyBz
Y2FsZWQgdG8gdGVzdCB0aGF0IHRoZSBwaXhlbCBtb3ZpbmcgaXMgZG9uZSBpbiB0aGUgdGFyZ2V0
IHNwYWNlLCB3aGVyZSB0aGUgYmFja2dyb3VuZCBmaWx0ZXIgaXMgYXBwbGllZCwgYnV0IHRoZSBz
dXJmYWNlCisgICAgICAgIC8vIGFwcGVhcnMgYXQgNTAsIDUwIGFuZCB0aGUgcmVwbGljYSBhdCAy
MDAsIDUwLgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExheWVyVHlwZSogcGFyZW50
ID0gdGhpcy0+Y3JlYXRlUm9vdCh0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDE1MCkpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBl
KiBmaWx0ZXJlZFN1cmZhY2UgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCBzY2Fs
ZUJ5SGFsZiwgRmxvYXRQb2ludCg1MCwgNTApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOwor
ICAgICAgICB0aGlzLT5jcmVhdGVSZXBsaWNhTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCB0aGlzLT5p
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgzMDAsIDApLCBJbnRTaXplKCkpOworICAgICAgICB0
eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjEgPSB0aGlzLT5jcmVhdGVE
cmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXll
clR5cGUqIG9jY2x1ZGluZ0xheWVyMiA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQs
IHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDEwMCksIEludFNpemUoMzAwLCA1
MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdM
YXllcjMgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCA1MCksIEludFNpemUoNTAsIDUwKSwgdHJ1ZSk7CisgICAgICAg
IHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyNCA9IHRoaXMtPmNyZWF0
ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDEw
MCwgNTApLCBJbnRTaXplKDEwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6
OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI1ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBh
cmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMjUwLCA1MCksIEludFNpemUo
NTAsIDUwKSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRmlsdGVycyBtYWtlIHRoZSBsYXllciBvd24g
YSBzdXJmYWNlLgorICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZp
bHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDEwLCBXZWJDb3JlOjpGaXhlZCksIEZpbHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAg
ICBmaWx0ZXJlZFN1cmZhY2UtPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAg
ICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9mIGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZmZWN0
LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRz
ZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdo
dCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0
YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXJXaXRoU2Npc3Nvcjx0
eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0eXBlbmFtZSBUeXBlczo6UmVuZGVyU3VyZmFjZVR5
cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICAgICAgb2NjbHVz
aW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAg
ICAgICAgLy8gVGhlc2UgbGF5ZXJzIG9jY2x1ZGUgcGl4ZWxzIGRpcmVjdGx5IGJlc2lkZSB0aGUg
ZmlsdGVyZWRTdXJmYWNlLiBCZWNhdXNlIGZpbHRlcmVkIHN1cmZhY2UgYmxlbmRzIHBpeGVscyBp
biBhIHJhZGl1cywgaXQgd2lsbAorICAgICAgICAvLyBuZWVkIHRvIHNlZSBzb21lIG9mIHRoZSBw
aXhlbHMgKHVwIHRvIHJhZGl1cyBmYXIpIHVuZGVybmVhdGggdGhlIG9jY2x1ZGluZ0xheWVycy4K
KyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjUsIG9jY2x1c2lvbik7Cisg
ICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXI0LCBvY2NsdXNpb24pOworICAg
ICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyMywgb2NjbHVzaW9uKTsKKyAgICAg
ICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjIsIG9jY2x1c2lvbik7CisgICAgICAg
IHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXIxLCBvY2NsdXNpb24pOworCisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVz
aW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAg
ICAgICAvLyBFdmVyeXRoaW5nIG91dHNpZGUgdGhlIHN1cmZhY2UvcmVwbGljYSBpcyBvY2NsdWRl
ZCBidXQgdGhlIHN1cmZhY2UvcmVwbGljYSBpdHNlbGYgaXMgbm90LgorICAgICAgICB0aGlzLT5l
bnRlckxheWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKyAgICAgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgxLCAwLCA5OSwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMSwgMCwgMTAwLCAxMDApKSk7CisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMSwgMTAwLCA5OSksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDAsIDEsIDEwMCwgMTAwKSkp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDk5LCAxMDApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgtMSwgMCwg
MTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMTAwLCA5
OSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRS
ZWN0KDAsIC0xLCAxMDAsIDEwMCkpKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDMwMCArIDEsIDAsIDk5LCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZp
bHRlcmVkU3VyZmFjZSwgSW50UmVjdCgzMDAgKyAxLCAwLCAxMDAsIDEwMCkpKTsKKyAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMDAgKyAwLCAxLCAxMDAsIDk5KSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMzAwICsgMCwgMSwg
MTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAwICsgMCwgMCwg
OTksIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNl
LCBJbnRSZWN0KDMwMCAtIDEsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDMwMCArIDAsIDAsIDEwMCwgOTkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgzMDAgKyAwLCAtMSwgMTAwLCAxMDApKSk7
CisgICAgICAgIHRoaXMtPmxlYXZlTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOwor
CisgICAgICAgIC8vIFRoZSBmaWx0ZXJlZCBsYXllci9yZXBsaWNhIGRvZXMgbm90IG9jY2x1ZGUu
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
CisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwgc28gaXQgbmVl
ZHMgcGl4ZWxzIHRoYXQgYXJlIGN1cnJlbnRseSBjb25zaWRlcmVkIG9jY2x1ZGVkIGluIG9yZGVy
IHRvIGJlIGRyYXduLiBTbyB0aGUgcGl4ZWxzCisgICAgICAgIC8vIGl0IG5lZWRzIHNob3VsZCBi
ZSByZW1vdmVkIHNvbWUgdGhlIG9jY2x1ZGVkIGFyZWEgc28gdGhhdCB3aGVuIHdlIGdldCB0byB0
aGUgcGFyZW50IHRoZXkgYXJlIGRyYXduLgorICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGlu
Z1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIHRoaXMtPmVu
dGVyTGF5ZXIocGFyZW50LCBvY2NsdXNpb24pOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5i
b3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2Ny
ZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCku
Ym91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRh
cmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgSW50UmVjdCBvdXRzZXRS
ZWN0OworICAgICAgICBJbnRSZWN0IHRlc3RSZWN0OworCisgICAgICAgIC8vIE5vdGhpbmcgaW4g
dGhlIGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRlcmVkU3VyZmFjZSBpcyBvY2NsdWRlZC4KKyAg
ICAgICAgb3V0c2V0UmVjdCA9IEludFJlY3QoNTAgLSBvdXRzZXRMZWZ0LCA1MCAtIG91dHNldFRv
cCwgNTAgKyBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0c2V0VG9wICsgb3V0c2V0
Qm90dG9tKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChvdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dCwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBTdHVmZiBvdXRzaWRlIHRoZSBibHVyIG91dHNl
dHMgaXMgc3RpbGwgb2NjbHVkZWQgdGhvdWdoLgorICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJl
Y3Q7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgxLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1Qob3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQsIHRl
c3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJl
Y3QuZXhwYW5kKDAsIDEpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0LCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAgICAgICAg
dGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsKKyAg
ICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRz
ZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3Qp
KTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3Zl
KDAsIC0xKTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDAsIDEpOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChvdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dCwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBOb3RoaW5nIGluIHRoZSBibHVyIG91dHNldHMg
Zm9yIHRoZSBmaWx0ZXJlZFN1cmZhY2UncyByZXBsaWNhIGlzIG9jY2x1ZGVkLgorICAgICAgICBv
dXRzZXRSZWN0ID0gSW50UmVjdCgyMDAgLSBvdXRzZXRMZWZ0LCA1MCAtIG91dHNldFRvcCwgNTAg
KyBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9t
KTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChvdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVz
dFJlY3QpKTsKKworICAgICAgICAvLyBTdHVmZiBvdXRzaWRlIHRoZSBibHVyIG91dHNldHMgaXMg
c3RpbGwgb2NjbHVkZWQgdGhvdWdoLgorICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7Cisg
ICAgICAgIHRlc3RSZWN0LmV4cGFuZCgxLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3V0
c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQsIHRlc3RSZWN0
KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhw
YW5kKDAsIDEpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0LCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJl
Y3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsKKyAgICAgICAg
dGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAg
ICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKDAsIC0x
KTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDAsIDEpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChvdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVz
dFJlY3QpKTsKKyAgICB9Cit9OworCitBTExfQ0NPQ0NMVVNJT05UUkFDS0VSX1RFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRl
cik7CisKK3RlbXBsYXRlPGNsYXNzIFR5cGVzLCBib29sIG9wYXF1ZUxheWVycz4KK2NsYXNzIEND
T2NjbHVzaW9uVHJhY2tlclRlc3RUd29CYWNrZ3JvdW5kRmlsdGVyc1JlZHVjZU9jY2x1c2lvblR3
aWNlIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9wYXF1ZUxheWVycz4g
eworcHJvdGVjdGVkOgorICAgIHZvaWQgcnVuTXlUZXN0KCkKKyAgICB7CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOworICAgICAgICBzY2FsZUJ5SGFsZi5zY2FsZSgw
LjUpOworCisgICAgICAgIC8vIE1ha2VzIHR3byBzdXJmYWNlcyB0aGF0IGNvbXBsZXRlbHkgY292
ZXIgfHBhcmVudHwuIFRoZSBvY2NsdXNpb24gYm90aCBhYm92ZSBhbmQgYmVsb3cgdGhlIGZpbHRl
cnMgd2lsbCBiZSByZWR1Y2VkIGJ5IGVhY2ggb2YgdGhlbS4KKyAgICAgICAgdHlwZW5hbWUgVHlw
ZXM6OkNvbnRlbnRMYXllclR5cGUqIHJvb3QgPSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDc1LCA3NSkpOworICAgICAgICB0
eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVTdXJmYWNlKHJv
b3QsIHNjYWxlQnlIYWxmLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDE1MCwgMTUwKSk7Cisg
ICAgICAgIHBhcmVudC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUg
VHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXJCZWxvdyA9IHRoaXMtPmNyZWF0ZURyYXdp
bmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDUwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBl
KiBmaWx0ZXJlZFN1cmZhY2UxID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgc2Nh
bGVCeUhhbGYsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7Cisg
ICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZTIgPSB0aGlz
LT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCBzY2FsZUJ5SGFsZiwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6Okxh
eWVyVHlwZSogb2NjbHVkaW5nTGF5ZXJBYm92ZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihw
YXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDEwMCwgMTAwKSwgSW50U2l6
ZSg1MCwgNTApLCB0cnVlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVycyBv
d24gc3VyZmFjZXMuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAg
ZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShM
ZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICAg
ICAgZmlsdGVyZWRTdXJmYWNlMS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisgICAg
ICAgIGZpbHRlcmVkU3VyZmFjZTItPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisg
ICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9mIGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZm
ZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBv
dXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRS
aWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJh
d0V0Yyhyb290KTsKKworICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNzb3I8
dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZhY2VU
eXBlPiBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9jY2x1
c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisg
ICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXJBYm92ZSwgb2NjbHVzaW9uKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAgLyAyLCAxMDAgLyAyLCA1MCAvIDIs
IDUwIC8gMiksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMTAw
LCA1MCwgNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZh
Y2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihmaWx0ZXJl
ZFN1cmZhY2UyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGluZ1N1
cmZhY2UoZmlsdGVyZWRTdXJmYWNlMiwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRM
YXllcihmaWx0ZXJlZFN1cmZhY2UxLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENv
bnRyaWJ1dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlMSwgb2NjbHVzaW9uKTsKKworICAgICAg
ICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyQmVsb3csIG9jY2x1c2lvbik7CisKKyAg
ICAgICAgQVNTRVJUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIFRlc3QgZXhw
ZWN0YXRpb25zIGluIHRoZSB0YXJnZXQuCisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRUb3BMZWZ0
T2NjbHVzaW9uID0gSW50UmVjdChvdXRzZXRSaWdodCAqIDIsIG91dHNldEJvdHRvbSAqIDIsIDUw
IC0gKG91dHNldExlZnQgKyBvdXRzZXRSaWdodCkgKiAyLCA1MCAtIChvdXRzZXRUb3AgKyBvdXRz
ZXRCb3R0b20pICogMik7CisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRCb3R0b21SaWdodE9jY2x1
c2lvbiA9IEludFJlY3QoMTAwICsgb3V0c2V0UmlnaHQgKiAyLCAxMDAgKyBvdXRzZXRCb3R0b20g
KiAyLCA1MCAtIChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQpICogMiwgNTAgLSAob3V0c2V0VG9w
ICsgb3V0c2V0Qm90dG9tKSAqIDIpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZFRv
cExlZnRPY2NsdXNpb24sIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0
cygpWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0ZWRCb3R0b21SaWdodE9jY2x1
c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKClbMV0pOwor
CisgICAgICAgIC8vIFRlc3QgZXhwZWN0YXRpb25zIGluIHRoZSBzY3JlZW4uIFRha2UgdGhlIGNl
aWxpbmcgb2YgaGFsZiBvZiB0aGUgb3V0c2V0cy4KKyAgICAgICAgb3V0c2V0VG9wID0gKG91dHNl
dFRvcCArIDEpIC8gMjsKKyAgICAgICAgb3V0c2V0UmlnaHQgPSAob3V0c2V0UmlnaHQgKyAxKSAv
IDI7CisgICAgICAgIG91dHNldEJvdHRvbSA9IChvdXRzZXRCb3R0b20gKyAxKSAvIDI7CisgICAg
ICAgIG91dHNldExlZnQgPSAob3V0c2V0TGVmdCArIDEpIC8gMjsKKyAgICAgICAgZXhwZWN0ZWRU
b3BMZWZ0T2NjbHVzaW9uID0gSW50UmVjdChvdXRzZXRSaWdodCAqIDIsIG91dHNldEJvdHRvbSAq
IDIsIDUwIC8gMiAtIChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQpICogMiwgNTAgLyAyIC0gKG91
dHNldFRvcCArIG91dHNldEJvdHRvbSkgKiAyKTsKKyAgICAgICAgZXhwZWN0ZWRCb3R0b21SaWdo
dE9jY2x1c2lvbiA9IEludFJlY3QoMTAwIC8gMiArIG91dHNldFJpZ2h0ICogMiwgMTAwIC8gMiAr
IG91dHNldEJvdHRvbSAqIDIsIDUwIC8gMiAtIChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQpICog
MiwgNTAgLzIgLSAob3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKSAqIDIpOworCisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKGV4cGVjdGVkVG9wTGVmdE9jY2x1c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluU2NyZWVuU3BhY2UoKS5yZWN0cygpWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhw
ZWN0ZWRCb3R0b21SaWdodE9jY2x1c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3Bh
Y2UoKS5yZWN0cygpWzFdKTsKKyAgICB9Cit9OworCitBTExfQ0NPQ0NMVVNJT05UUkFDS0VSX1RF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVz
aW9uVHdpY2UpOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+Citj
bGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNr
Z3JvdW5kRmlsdGVyV2l0aENsaXAgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBl
cywgb3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3QoKQorICAg
IHsKKyAgICAgICAgLy8gTWFrZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUweDUw
LCB0aGF0IGFyZSBjb21wbGV0ZWx5IHN1cnJvdW5kZWQgYnkgb3BhcXVlIGxheWVycyB3aGljaCBh
cmUgYWJvdmUgdGhlbSBpbiB0aGUgei1vcmRlci4KKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkNv
bnRlbnRMYXllclR5cGUqIHBhcmVudCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAxNTApKTsKKyAgICAgICAgLy8g
V2Ugc3RpY2sgdGhlIGZpbHRlcmVkIHN1cmZhY2UgaW5zaWRlIGEgY2xpcHBpbmcgc3VyZmFjZSBz
byB0aGF0IHdlIGNhbiBtYWtlIHN1cmUgdGhlIGNsaXAgaXMgaG9ub3JlZCB3aGVuIGV4cG9zaW5n
IHBpeGVscyBmb3IKKyAgICAgICAgLy8gdGhlIGJhY2tncm91bmQgZmlsdGVyLgorICAgICAgICB0
eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBjbGlwcGluZ1N1cmZhY2UgPSB0aGlzLT5jcmVhdGVT
dXJmYWNlKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMzAwLCA3MCkpOworICAgICAgICBjbGlwcGluZ1N1cmZhY2UtPnNldE1hc2tzVG9Cb3Vu
ZHModHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3Vy
ZmFjZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihjbGlwcGluZ1N1cmZhY2UsIHRoaXMtPmlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDUwLCA1MCksIEludFNpemUoNTAsIDUwKSwgZmFsc2Up
OworICAgICAgICB0aGlzLT5jcmVhdGVSZXBsaWNhTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCB0aGlz
LT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgxNTAsIDApLCBJbnRTaXplKCkpOworICAgICAg
ICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjEgPSB0aGlzLT5jcmVh
dGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgzMDAsIDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpM
YXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMiA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJl
bnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDEwMCksIEludFNpemUoMzAw
LCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRp
bmdMYXllcjMgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCA1MCksIEludFNpemUoNTAsIDUwKSwgdHJ1ZSk7CisgICAg
ICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyNCA9IHRoaXMtPmNy
ZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDEwMCwgNTApLCBJbnRTaXplKDEwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlw
ZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI1ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVy
KHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMjUwLCA1MCksIEludFNp
emUoNTAsIDUwKSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRmlsdGVycyBtYWtlIHRoZSBsYXllciBv
d24gYSBzdXJmYWNlLiBUaGlzIGZpbHRlciBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBnb2VzIG91
dHNpZGUgdGhlIGJvdHRvbSBvZiB0aGUgY2xpcHBpbmdTdXJmYWNlLgorICAgICAgICBGaWx0ZXJP
cGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChC
bHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEyLCBXZWJDb3JlOjpGaXhlZCksIEZp
bHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBmaWx0ZXJlZFN1cmZhY2UtPnNldEJhY2tn
cm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9m
IGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZmZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBv
dXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdl
dE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0
KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXJXaXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0
eXBlbmFtZSBUeXBlczo6UmVuZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAs
IDEwMDAsIDEwMDApKTsKKyAgICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAgICAgICAgLy8gVGhlc2UgbGF5ZXJzIG9jY2x1
ZGUgcGl4ZWxzIGRpcmVjdGx5IGJlc2lkZSB0aGUgZmlsdGVyZWRTdXJmYWNlLiBCZWNhdXNlIGZp
bHRlcmVkIHN1cmZhY2UgYmxlbmRzIHBpeGVscyBpbiBhIHJhZGl1cywgaXQgd2lsbAorICAgICAg
ICAvLyBuZWVkIHRvIHNlZSBzb21lIG9mIHRoZSBwaXhlbHMgKHVwIHRvIHJhZGl1cyBmYXIpIHVu
ZGVybmVhdGggdGhlIG9jY2x1ZGluZ0xheWVycy4KKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihv
Y2NsdWRpbmdMYXllcjUsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2Nj
bHVkaW5nTGF5ZXI0LCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1
ZGluZ0xheWVyMywgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRp
bmdMYXllcjIsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5n
TGF5ZXIxLCBvY2NsdXNpb24pOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwg
MCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAw
LCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3Vy
ZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBFdmVyeXRoaW5nIG91dHNpZGUg
dGhlIHN1cmZhY2UvcmVwbGljYSBpcyBvY2NsdWRlZCBidXQgdGhlIHN1cmZhY2UvcmVwbGljYSBp
dHNlbGYgaXMgbm90LgorICAgICAgICB0aGlzLT5lbnRlckxheWVyKGZpbHRlcmVkU3VyZmFjZSwg
b2NjbHVzaW9uKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxLCAwLCA0OSwgNTAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVj
dCgxLCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMSwg
NTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2Us
IEludFJlY3QoMCwgMSwgNTAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRT
dXJmYWNlLCBJbnRSZWN0KC0xLCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMCwgMCwgNTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChm
aWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgLTEsIDUwLCA1MCkpKTsKKworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDE1MCArIDEsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDEsIDAsIDUwLCA1
MCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxNTAgKyAwLCAxLCA1MCwgNDkp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVj
dCgxNTAgKyAwLCAxLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MTUwICsgMCwgMCwgNDksIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0
ZXJlZFN1cmZhY2UsIEludFJlY3QoMTUwIC0gMSwgMCwgNTAsIDUwKSkpOworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDE1MCArIDAsIDAsIDUwLCA0OSksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDAsIC0xLCA1MCwg
NTApKSk7CisgICAgICAgIHRoaXMtPmxlYXZlTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNp
b24pOworCisgICAgICAgIC8vIFRoZSBmaWx0ZXJlZCBsYXllci9yZXBsaWNhIGRvZXMgbm90IG9j
Y2x1ZGUuCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwgc28g
aXQgbmVlZHMgcGl4ZWxzIHRoYXQgYXJlIGN1cnJlbnRseSBjb25zaWRlcmVkIG9jY2x1ZGVkIGlu
IG9yZGVyIHRvIGJlIGRyYXduLiBTbyB0aGUgcGl4ZWxzCisgICAgICAgIC8vIGl0IG5lZWRzIHNo
b3VsZCBiZSByZW1vdmVkIHNvbWUgdGhlIG9jY2x1ZGVkIGFyZWEgc28gdGhhdCB3aGVuIHdlIGdl
dCB0byB0aGUgcGFyZW50IHRoZXkgYXJlIGRyYXduLgorICAgICAgICB0aGlzLT52aXNpdENvbnRy
aWJ1dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIHRo
aXMtPmVudGVyQ29udHJpYnV0aW5nU3VyZmFjZShjbGlwcGluZ1N1cmZhY2UsIG9jY2x1c2lvbik7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgICAgICBJbnRSZWN0IG91dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgY2xpcHBlZE91
dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgdGVzdFJlY3Q7CisKKyAgICAgICAgLy8gTm90aGlu
ZyBpbiB0aGUgKGNsaXBwZWQpIGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRlcmVkU3VyZmFjZSBp
cyBvY2NsdWRlZC4KKyAgICAgICAgb3V0c2V0UmVjdCA9IEludFJlY3QoNTAgLSBvdXRzZXRMZWZ0
LCA1MCAtIG91dHNldFRvcCwgNTAgKyBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0
c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICAgICAgY2xpcHBlZE91dHNldFJlY3QgPSBpbnRl
cnNlY3Rpb24ob3V0c2V0UmVjdCwgSW50UmVjdCgwIC0gb3V0c2V0TGVmdCwgMCAtIG91dHNldFRv
cCwgMzAwICsgb3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCA3MCArIG91dHNldFRvcCArIG91dHNl
dEJvdHRvbSkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBTdHVmZiBvdXRz
aWRlIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRzIGlzIHN0aWxsIG9jY2x1ZGVkIHRob3VnaC4K
KyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQo
MSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAg
ICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwg
MSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAg
ICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsK
KyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChj
bGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGlu
Z1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAg
ICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAx
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOworCisgICAg
ICAgIC8vIE5vdGhpbmcgaW4gdGhlIChjbGlwcGVkKSBibHVyIG91dHNldHMgZm9yIHRoZSBmaWx0
ZXJlZFN1cmZhY2UncyByZXBsaWNhIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRSZWN0ID0g
SW50UmVjdCgyMDAgLSBvdXRzZXRMZWZ0LCA1MCAtIG91dHNldFRvcCwgNTAgKyBvdXRzZXRMZWZ0
ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICAgICAg
Y2xpcHBlZE91dHNldFJlY3QgPSBpbnRlcnNlY3Rpb24ob3V0c2V0UmVjdCwgSW50UmVjdCgwIC0g
b3V0c2V0TGVmdCwgMCAtIG91dHNldFRvcCwgMzAwICsgb3V0c2V0TGVmdCArIG91dHNldFJpZ2h0
LCA3MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSkpOworICAgICAgICB0ZXN0UmVjdCA9IG91
dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsK
KworICAgICAgICAvLyBTdHVmZiBvdXRzaWRlIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRzIGlz
IHN0aWxsIG9jY2x1ZGVkIHRob3VnaC4KKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0Owor
ICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNs
aXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5n
U3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAg
ICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBw
ZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3Vy
ZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAg
ICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOwor
ICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRl
c3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAg
ICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBl
ZE91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJm
YWNlLCB0ZXN0UmVjdCkpOworICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3Jv
dW5kRmlsdGVyV2l0aENsaXApOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVM
YXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVzaW9uQmVsb3dC
YWNrZ3JvdW5kRmlsdGVyIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9w
YXF1ZUxheWVycz4geworcHJvdGVjdGVkOgorICAgIHZvaWQgcnVuTXlUZXN0KCkKKyAgICB7Cisg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOworICAgICAgICBzY2FsZUJ5
SGFsZi5zY2FsZSgwLjUpOworCisgICAgICAgIC8vIE1ha2UgYSBzdXJmYWNlIGFuZCBpdHMgcmVw
bGljYSwgZWFjaCA1MHg1MCwgdGhhdCBhcmUgY29tcGxldGVseSBzdXJyb3VuZGVkIGJ5IG9wYXF1
ZSBsYXllcnMgd2hpY2ggYXJlIGFib3ZlIHRoZW0gaW4gdGhlIHotb3JkZXIuCisgICAgICAgIC8v
IFRoZSBzdXJmYWNlIGlzIHNjYWxlZCB0byB0ZXN0IHRoYXQgdGhlIHBpeGVsIG1vdmluZyBpcyBk
b25lIGluIHRoZSB0YXJnZXQgc3BhY2UsIHdoZXJlIHRoZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBh
cHBsaWVkLCBidXQgdGhlIHN1cmZhY2UKKyAgICAgICAgLy8gYXBwZWFycyBhdCA1MCwgNTAgYW5k
IHRoZSByZXBsaWNhIGF0IDIwMCwgNTAuCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50
TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMTUwKSk7CisgICAgICAgIHR5cGVuYW1l
IFR5cGVzOjpMYXllclR5cGUqIGJlaGluZFN1cmZhY2VMYXllciA9IHRoaXMtPmNyZWF0ZURyYXdp
bmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDYwLCA2MCks
IEludFNpemUoMzAsIDMwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5
cGUqIGJlaGluZFJlcGxpY2FMYXllciA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQs
IHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDIxMCwgNjApLCBJbnRTaXplKDMwLCAz
MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBmaWx0ZXJlZFN1
cmZhY2UgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCBzY2FsZUJ5SGFsZiwgRmxv
YXRQb2ludCg1MCwgNTApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOworICAgICAgICB0aGlz
LT5jcmVhdGVSZXBsaWNhTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCB0aGlzLT5pZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgzMDAsIDApLCBJbnRTaXplKCkpOworCisgICAgICAgIC8vIEZpbHRlcnMg
bWFrZSB0aGUgbGF5ZXIgb3duIGEgc3VyZmFjZS4KKyAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBm
aWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmx1ckZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgzLCBXZWJDb3JlOjpGaXhlZCksIEZpbHRlck9wZXJhdGlv
bjo6QkxVUikpOworICAgICAgICBmaWx0ZXJlZFN1cmZhY2UtPnNldEJhY2tncm91bmRGaWx0ZXJz
KGZpbHRlcnMpOworCisgICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9mIGluZmx1ZW5jZSBm
b3IgdGhlIGJsdXIgZWZmZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwg
b3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0
c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKKworICAgICAg
ICB0aGlzLT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXJXaXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0eXBlbmFtZSBUeXBl
czo6UmVuZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDAp
KTsKKyAgICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisKKyAgICAgICAgLy8gVGhlIHN1cmZhY2UgaGFzIGEgYmFja2dyb3VuZCBi
bHVyLCBzbyBpdCBibHVycyBub24tb3BhcXVlIHBpeGVscyBiZWxvdyBpdC4KKyAgICAgICAgdGhp
cy0+dmlzaXRMYXllcihmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMt
PnZpc2l0Q29udHJpYnV0aW5nU3VyZmFjZShmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisK
KyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihiZWhpbmRSZXBsaWNhTGF5ZXIsIG9jY2x1c2lvbik7
CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIoYmVoaW5kU3VyZmFjZUxheWVyLCBvY2NsdXNpb24p
OworCisgICAgICAgIC8vIE5vbi1vcGFxdWUgcGl4ZWxzIGFyZSBibHVycmVkIGludG8gdGhlIGxh
eWVycyBiZWhpbmQgdGhlIGZpbHRlcmVkU3VyZmFjZS4KKyAgICAgICAgSW50UmVjdCBpbnNldEJl
aGluZFN1cmZhY2UgPSBJbnRSZWN0KDYwLCA2MCwgMzAsIDMwKTsKKyAgICAgICAgaW5zZXRCZWhp
bmRTdXJmYWNlLm1vdmUob3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSk7CisgICAgICAgIGluc2V0
QmVoaW5kU3VyZmFjZS5jb250cmFjdChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIG91dHNldFRv
cCArIG91dHNldEJvdHRvbSk7CisKKyAgICAgICAgSW50UmVjdCBpbnNldEJlaGluZFJlcGxpY2Eg
PSBJbnRSZWN0KDIxMCwgNjAsIDMwLCAzMCk7CisgICAgICAgIGluc2V0QmVoaW5kUmVwbGljYS5t
b3ZlKG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20pOworICAgICAgICBpbnNldEJlaGluZFJlcGxp
Y2EuY29udHJhY3Qob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRUb3AgKyBvdXRzZXRC
b3R0b20pOworCisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRPcGFxdWVCb3VuZHMgPSB1bmlvblJl
Y3QoaW5zZXRCZWhpbmRTdXJmYWNlLCBpbnNldEJlaGluZFJlcGxpY2EpOworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChleHBlY3RlZE9wYXF1ZUJvdW5kcywgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKGV4cGVjdGVkT3BhcXVlQm91bmRzLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgfQorfTsKKworQUxM
X0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3RSZWR1Y2VPY2Ns
dXNpb25CZWxvd0JhY2tncm91bmRGaWx0ZXIpOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9v
bCBvcGFxdWVMYXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVz
aW9uUGFydGlhbGx5QmVsb3dCYWNrZ3JvdW5kRmlsdGVyIDogcHVibGljIENDT2NjbHVzaW9uVHJh
Y2tlclRlc3Q8VHlwZXMsIG9wYXF1ZUxheWVycz4geworcHJvdGVjdGVkOgorICAgIHZvaWQgcnVu
TXlUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIE1ha2UgYSBzdXJmYWNlIHRoYXQgaXMgY2VudGVy
ZWQgaW4gcGFyZW50IGFuZCBzaXplIDUweDUwLiBUaGUgbGF5ZXIgYmVsb3cgaXMgcGFydGlhbGx5
IHVuZGVyIHRoZSBzdXJmYWNlIGFuZCBwYXJ0aWFsbHkgbm90LgorICAgICAgICAvLyBUaGUgYmx1
cnJpbmcgb2YgdGhlIHN1cmZhY2Ugc2hvdWxkIHJlZHVjZSB0aGUgb2NjbHVzaW9uIGZyb20gdGhl
IGxheWVyIGJlbG93LCB3aXRob3V0IHNlcGFyYXRpbmcgdGhhdCBvY2NsdXNpb24gaW50byB0d28K
KyAgICAgICAgLy8gcGllY2VzIChvbmUgdW5kZXJuZWF0aCB0aGUgc3VyZmFjZSBhbmQgb25lIG5v
dCkuCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0
aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDE1MCwgMTUwKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGJl
aGluZFN1cmZhY2VMYXllciA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMt
PmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDc1LCA3NSksIEludFNpemUoNTAsIDUwKSwgdHJ1
ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZSA9
IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDUwLCA1MCksIEludFNpemUoNTAsIDUwKSwgZmFsc2UpOworCisgICAgICAgIC8v
IEZpbHRlcnMgbWFrZSB0aGUgbGF5ZXIgb3duIGEgc3VyZmFjZS4KKyAgICAgICAgRmlsdGVyT3Bl
cmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmx1
ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgzLCBXZWJDb3JlOjpGaXhlZCksIEZpbHRl
ck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBmaWx0ZXJlZFN1cmZhY2UtPnNldEJhY2tncm91
bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9mIGlu
Zmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZmZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBvdXRz
ZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdldE91
dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsK
KworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RDQ09j
Y2x1c2lvblRyYWNrZXJXaXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0eXBl
bmFtZSBUeXBlczo6UmVuZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEw
MDAsIDEwMDApKTsKKyAgICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVj
dCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAgICAgICAgLy8gVGhlIHN1cmZhY2UgaGFzIGEgYmFj
a2dyb3VuZCBibHVyLCBzbyBpdCBibHVycyBub24tb3BhcXVlIHBpeGVscyBiZWxvdyBpdC4KKyAg
ICAgICAgdGhpcy0+dmlzaXRMYXllcihmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisgICAg
ICAgIHRoaXMtPnZpc2l0Q29udHJpYnV0aW5nU3VyZmFjZShmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1
c2lvbik7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihiZWhpbmRTdXJmYWNlTGF5ZXIsIG9j
Y2x1c2lvbik7CisKKyAgICAgICAgLy8gQnV0IE5vbi1vcGFxdWUgcGl4ZWxzIGFyZSBibHVycmVk
IGludG8gdGhlIGxheWVyIGJlaGluZCB0aGUgZmlsdGVyZWRTdXJmYWNlLgorICAgICAgICAvLyBQ
aXhlbHMgb3V0c2lkZSBvZiB0aGUgYmx1ciBhcmVhIHNob3VsZCBub3QgYmUgYmx1cnJlZCBpbnRv
IHRoZSBvY2NsdXNpb24gaG93ZXZlci4KKyAgICAgICAgSW50UmVjdCBvcmlnaW5hbE9jY2x1c2lv
biA9IEludFJlY3QoNzUsIDc1LCA1MCwgNTApOworICAgICAgICBJbnRSZWN0IGJsdXJFZmZlY3Rl
ZEFyZWEgPSBJbnRSZWN0KDUwIC0gb3V0c2V0TGVmdCwgNTAgLSBvdXRzZXRUb3AsIDUwICsgb3V0
c2V0TGVmdCArIG91dHNldFJpZ2h0LCA1MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSk7CisK
KyAgICAgICAgLy8gVGhlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBibHVyIGFyZSBub3QgZWZmZWN0
ZWQsIHNvIHRoZSBib3VuZHMgb2YgdGhlIG9jY2x1c2lvbiByZW1haW4gdGhlIHNhbWUuCisgICAg
ICAgIEVYUEVDVF9FUV9SRUNUKG9yaWdpbmFsT2NjbHVzaW9uLCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3JpZ2lu
YWxPY2NsdXNpb24sIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMo
KSk7CisKKyAgICAgICAgLy8gVGhpcyBvY2NsdXNpb24gaXMgYmx1cnJlZCBhd2F5IGZyb20gdGhl
IGxlZnQvdG9wIHNpbmNlIHRob3NlIGVkZ2VzIGFyZSBibHVycmVkIHVuZGVybmVhdGgKKyAgICAg
ICAgLy8gdGhlIHN1cmZhY2UuIEJ1dCB0aGUgcmlnaHQvYm90dG9tIGVkZ2VzIGRpZCBhbmQgc2hv
dWxkIGNvbnRpbnVlIHRvIGV4dGVuZCByaWdodCB0byB0aGUKKyAgICAgICAgLy8gZWRnZSBvZiB0
aGUgYmx1ciwgYW5kIG5vdCBiZSByZWR1Y2VkLgorICAgICAgICBJbnRSZWN0IG9jY2x1c2lvblJl
ZHVjZWRCeUJsdXIgPSBvcmlnaW5hbE9jY2x1c2lvbjsKKyAgICAgICAgb2NjbHVzaW9uUmVkdWNl
ZEJ5Qmx1ci5tb3ZlKG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20pOworICAgICAgICBvY2NsdXNp
b25SZWR1Y2VkQnlCbHVyLmludGVyc2VjdChibHVyRWZmZWN0ZWRBcmVhKTsKKworICAgICAgICBS
ZWdpb24gZXhwZWN0ZWRPY2NsdXNpb24ob3JpZ2luYWxPY2NsdXNpb24pOworICAgICAgICBleHBl
Y3RlZE9jY2x1c2lvbi5zdWJ0cmFjdChibHVyRWZmZWN0ZWRBcmVhKTsKKyAgICAgICAgZXhwZWN0
ZWRPY2NsdXNpb24udW5pdGUob2NjbHVzaW9uUmVkdWNlZEJ5Qmx1cik7CisKKyAgICAgICAgQVNT
RVJUX0VRKDN1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDN1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gc2NyZWVu
UmVjdHMgPSBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCk7CisgICAg
ICAgIFZlY3RvcjxJbnRSZWN0PiB0YXJnZXRSZWN0cyA9IG9jY2x1c2lvbi5vY2NsdXNpb25JblRh
cmdldFN1cmZhY2UoKS5yZWN0cygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsr
aSkgeworICAgICAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0ZWRPY2NsdXNpb24ucmVjdHMo
KVtpXSwgc2NyZWVuUmVjdHNbaV0pOworICAgICAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0
ZWRPY2NsdXNpb24ucmVjdHMoKVtpXSwgdGFyZ2V0UmVjdHNbaV0pOworICAgICAgICB9CisgICAg
fQorfTsKKworQUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3RSZWR1Y2VPY2NsdXNpb25QYXJ0aWFsbHlCZWxvd0JhY2tncm91bmRGaWx0ZXIpOworCiB9IC8v
IG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139322</attachid>
            <date>2012-04-27 19:27:44 -0700</date>
            <delta_ts>2012-05-01 13:27:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84317-20120427192743.patch</filename>
            <type>text/plain</type>
            <size>50433</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAwMmNkOTJiM2Y1ZmYy
MzZhMzg2ZGQzNzUxNjc3ODEyMGEyN2VjMDNkLi43YzkyOGMwMDkwOTc1ZDYyYTQwYjBhYjk0M2Vj
MTI1YjAzOGQ5NzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNC0yNyAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEg
YmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaDoKKwog
MjAxMi0wNC0yNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gU2VwYXJhdGUgSU9TdXJmYWNlIGxheWVyIHR5cGUgZnJvbSB0ZXh0dXJl
IGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU4YzUxNDY5YTJlOGQzMWQ4NjY5ODYxMzNjOTQ3ZDI3Y2Ix
OWQ0M2EuLmFiZDhlZWFmZjZhZTg2YjAxZGNiMzhlYzg0ZWRiOWU3MWNmMDA5MWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wNC0yNyAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIERvbid0IG9jY2x1ZGUgcGl4ZWxzIGlu
IGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEgYmFja2dyb3VuZCBmaWx0ZXIgYmx1cgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbHVyIGZpbHRl
cnMgbW92ZSBwaXhlbHMgYXJvdW5kLCBzbyBhIHBpeGVsIGNhbiBpbmZsdWVuY2UgdGhlIHZhbHVl
IG9mCisgICAgICAgIHBpeGVscyBhdCBzb21lIGRpc3RhbmNlIGF3YXkuIElmIGEgcGl4ZWwgaXMg
bm90IG9jY2x1ZGVkLCB0aGVuIGFsbAorICAgICAgICBwaXhlbHMgd2l0aGluIHRoZSByYWRpdXMg
b2YgdGhlIGJsdXIgbWF5IGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgdGhhdAorICAgICAgICBwaXhl
bCwgc28gdGhleSBzaG91bGQgYWxzbyBzdGF5IHVub2NjbHVkZWQuCisKKyAgICAgICAgRm9yIGJh
Y2tncm91bmQgZmlsdGVycywgdGhlIHBpeGVscyBhcmUgcmVhZCBmcm9tIHRoZSBmaWx0ZXIncyB0
YXJnZXQKKyAgICAgICAgc3VyZmFjZSwgc28gd2UgcmVtb3ZlIG9jY2x1c2lvbiBmcm9tIHRoYXQg
dGFyZ2V0IHN1cmZhY2UgZnJvbSBwaXhlbHMKKyAgICAgICAgdGhhdCB3aWxsIGJsdXIgaW50byB2
aXNpYmxlIHBpeGVscy4KKworICAgICAgICBPY2NsdXNpb24gYWRkZWQgYmVsb3cgYSBiYWNrZ3Jv
dW5kIGZpbHRlciBuZWVkcyB0byBiZSByZWR1Y2VkIGJ5CisgICAgICAgIHBpeGVscyBvdXRzaWRl
IHRoZSBvY2NsdXNpb24gdGhhdCBtb3ZlIGludG8gdGhlIG9jY2x1c2lvbiBhbmQKKyAgICAgICAg
Y2F1c2UgaXQgdG8gYmVjb21lIG5vbi1vcGFxdWUuCisKKyAgICAgICAgVW5pdCB0ZXN0OiBDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmls
dGVyCisgICAgICAgICAgICAgICAgICAgQ0NPY2NsdXNpb25UcmFja2VyVGVzdFR3b0JhY2tncm91
bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UKKyAgICAgICAgICAgICAgICAgICBDQ09jY2x1
c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVy
V2l0aENsaXAKKyAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNl
T2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVyCisgICAgICAgICAgICAgICAgICAgQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvblBhcnRpYWxseUJlbG93QmFja2dyb3VuZEZp
bHRlcgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNp
b25UcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6bGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjo6OmNvbXB1dGVP
Y2NsdXNpb25SZWR1Y2VkUmVjdEJlaGluZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6cmVk
dWNlT2NjbHVzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6YXBwbHlSZWR1Y2VkT2NjbHVzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oOgor
ICAgICAgICAoT2NjbHVzaW9uUmVkdWNlZFJlY3QpOgorICAgICAgICAoQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZSk6CisgICAgICAgIChTdGFja09iamVjdCk6CisKIDIwMTItMDQtMjcgIE5hdCBEdWNh
ICA8bmR1Y2FAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEV4cG9zZSBoaWdoLXJlc29sdXRpb24g
b24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IDM4ZWI0MWJhY2QzZGRlZGY1ZDc2NDA0ZTM0ZWI3YjU2ZjY3OTEwYTAuLmYxNDk0NzAw
MWY4ZjUzZDA3ZmZhYWRjMmIwZTNiM2NhODRiMzYxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDQtMjcgIERhbmEgSmFuc2VucyAgPGRhbmFrakBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBEb24ndCBvY2NsdWRlIHBpeGVscyBp
biBhIHN1cmZhY2UgdGhhdCBhcmUgbmVlZGVkIGZvciBhIGJhY2tncm91bmQgZmlsdGVyIGJsdXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MzE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1
c2lvblRyYWNrZXJUZXN0U3VyZmFjZUNoaWxkT2ZDbGlwcGluZ1N1cmZhY2U6OnJ1bk15VGVzdCk6
CisgICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0
RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRG
b3JCYWNrZ3JvdW5kRmlsdGVyOjpydW5NeVRlc3QpOgorICAgICAgICAoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RUd29CYWNrZ3JvdW5kRmlsdGVy
c1JlZHVjZU9jY2x1c2lvblR3aWNlOjpydW5NeVRlc3QpOgorICAgICAgICAoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlcldpdGhD
bGlwKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9j
Y2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyV2l0aENsaXA6OnJ1bk15VGVzdCk6
CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNr
Z3JvdW5kRmlsdGVyKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVyOjpydW5NeVRlc3QpOgorICAg
ICAgICAoQ0NPY2NsdXNpb25UcmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvblBhcnRpYWxseUJlbG93
QmFja2dyb3VuZEZpbHRlcik6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFj
a2VyVGVzdFJlZHVjZU9jY2x1c2lvblBhcnRpYWxseUJlbG93QmFja2dyb3VuZEZpbHRlcjo6cnVu
TXlUZXN0KToKKwogMjAxMi0wNC0yNyAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgRXhwb3NlIGhpZ2gtcmVzb2x1dGlvbiBvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUg
Y2FsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
RmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZp
bHRlck9wZXJhdGlvbi5oCmluZGV4IDJiNTk0MGM5NDIwNjVmMThkMDcyZjI5ZDlhOGZjNzk3ZWMy
NDU2YjguLjdjYjdlM2ZiYmFjMTdiZjgwMzI1MjhiN2EwZDQ0MDc4YThmYzAyMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgK
KysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24u
aApAQCAtNzUsNyArNzUsOCBAQCBzdHJ1Y3QgV2ViQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiA6IHB1YmxpYyBXZWJGaWx0ZXJPcGVyYXRpb24gewogICAgICAgICBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyVHlwZUludmVydCA9IDUsCiAgICAgICAgIEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJUeXBlQnJpZ2h0bmVzcyA9IDcsCiAgICAgICAgIEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJUeXBlQ29udHJhc3QgPSA4Ci0gICAgICAgIC8vIE9wYWNpdHkgaXMg
bWlzc2luZyBiZWNhdXNlIHRoaXMgaXMgbW9yZSBleHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcg
b3BhY2l0eSBvbiB0aGUgbGF5ZXIuCisgICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNh
dXNlIHRoaXMgaXMgbW9yZSBleHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0
aGUgbGF5ZXIsCisgICAgICAgIC8vIGFuZCBvcGFjaXR5IGlzIG5vdCBhbGxvd2VkIGZvciBiYWNr
Z3JvdW5kIGZpbHRlcnMuCiAgICAgfTsKIAogICAgIFdlYkJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24oQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlclR5cGUgdHlwZSwgZmxv
YXQgYW1vdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKaW5kZXggNDRh
NjhiYTUyMTQwOTIwOTJiYzYwZmFlNDA0ZGFjYjkzZjlkOTI5Mi4uMTE0NjczY2FhNjVjZGUxYWVh
MDk0NGY2MzQ5NjdiNzEyOTY3NGI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNr
ZXIuY3BwCkBAIC0xNjksMTggKzE2OSwxMDcgQEAgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3UKICAg
ICBSZWdpb24gb2xkVGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQgPSB0cmFuc2Zvcm1TdXJmYWNl
T3BhcXVlUmVnaW9uPFJlbmRlclN1cmZhY2VUeXBlPihvbGRUYXJnZXQsIG1fc3RhY2tbbGFzdElu
ZGV4XS5vY2NsdXNpb25JblRhcmdldCwgb2xkVGFyZ2V0LT5vcmlnaW5UcmFuc2Zvcm0oKSk7CiAg
ICAgaWYgKG9sZFRhcmdldC0+aGFzUmVwbGljYSgpKQogICAgICAgICBvbGRUYXJnZXRPY2NsdXNp
b25Jbk5ld1RhcmdldC51bml0ZSh0cmFuc2Zvcm1TdXJmYWNlT3BhcXVlUmVnaW9uPFJlbmRlclN1
cmZhY2VUeXBlPihvbGRUYXJnZXQsIG1fc3RhY2tbbGFzdEluZGV4XS5vY2NsdXNpb25JblRhcmdl
dCwgb2xkVGFyZ2V0LT5yZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCkpKTsKKyAgICBSZWdpb24mIG9s
ZFRhcmdldE9jY2x1c2lvbkluU2NyZWVuID0gbV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbklu
U2NyZWVuOworCisgICAgaWYgKCFvbGRUYXJnZXQtPmJhY2tncm91bmRGaWx0ZXJzKCkuaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIHN1cmZhY2UgZG9lcyBu
b3QgaGF2ZSBhIGJhY2tncm91bmQgZmlsdGVyIGJ1dCBpcyBiZWxvdyBvbmUgdGhhdCBkb2VzLCB0
aGVuCisgICAgICAgIC8vIHdlIG5lZWQgdG8gcmVkdWNlIGp1c3QgdGhpcyBsYXllcidzIG9jY2x1
c2lvbiBjb250cmlidXRpb24gdG8gaXRzIHRhcmdldCBzdXJmYWNlLgorICAgICAgICAvLyBJZiBp
dCBkb2VzIGhhdmUgYSBiYWNrZ3JvdW5kIGZpbHRlciwgd2UgYWxzbyBuZWVkIHRvIHJlZHVjZSBp
dHMgb2NjbHVzaW9uLCBidXQgd2UKKyAgICAgICAgLy8gZG8gaXQgYmVsb3cgY29tYmluZWQgd2l0
aCByZWR1Y2luZyBvY2NsdXNpb24gb2Ygb3RoZXIgdGhpbmdzIGFib3ZlIHRoZSBzdXJmYWNlLgor
ICAgICAgICBhcHBseVJlZHVjZWRPY2NsdXNpb24obV9zdGFjay5sYXN0KCkucmVkdWNlZE9jY2x1
c2lvbiwgb2xkVGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQsIG9sZFRhcmdldE9jY2x1c2lvbklu
U2NyZWVuKTsKKyAgICB9CiAKICAgICBpZiAoc3VyZmFjZVdpbGxCZUF0VG9wQWZ0ZXJQb3ApIHsK
ICAgICAgICAgLy8gTWVyZ2UgdGhlIHRvcCBvZiB0aGUgc3RhY2sgZG93bi4KLQotICAgICAgICBt
X3N0YWNrW2xhc3RJbmRleCAtIDFdLm9jY2x1c2lvbkluU2NyZWVuLnVuaXRlKG1fc3RhY2tbbGFz
dEluZGV4XS5vY2NsdXNpb25JblNjcmVlbik7CiAgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0g
MV0ub2NjbHVzaW9uSW5UYXJnZXQudW5pdGUob2xkVGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQp
OworICAgICAgICBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLm9jY2x1c2lvbkluU2NyZWVuLnVuaXRl
KG9sZFRhcmdldE9jY2x1c2lvbkluU2NyZWVuKTsKICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0
KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdG9wIG9mIHRoZSBzdGFj
ayB3aXRoIHRoZSBuZXcgcHVzaGVkIHN1cmZhY2UuIENvcHkgdGhlIG9jY2x1ZGVkIHNjcmVlbiBy
ZWdpb24gdG8gdGhlIHRvcC4KICAgICAgICAgbV9zdGFjay5sYXN0KCkuc3VyZmFjZSA9IG5ld1Rh
cmdldDsKICAgICAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQgPSBvbGRUYXJn
ZXRPY2NsdXNpb25Jbk5ld1RhcmdldDsKICAgICB9CisKKyAgICBpZiAob2xkVGFyZ2V0LT5iYWNr
Z3JvdW5kRmlsdGVycygpLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKSB7CisgICAgICAgIFZl
Y3RvcjxPY2NsdXNpb25SZWR1Y2VkUmVjdD4gb2xkVGFyZ2V0UmVkdWNlZE9jY2x1c2lvbjsKKyAg
ICAgICAgT2NjbHVzaW9uUmVkdWNlZFJlY3Qgb2NjbHVzaW9uUmVkdWNlZFJlY3Q7CisgICAgICAg
IGNvbXB1dGVPY2NsdXNpb25SZWR1Y2VkUmVjdEJlaGluZFN1cmZhY2Uob2xkVGFyZ2V0LCBuZXdU
YXJnZXQsIG9sZFRhcmdldC0+b3JpZ2luVHJhbnNmb3JtKCksIG9sZFRhcmdldC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSwgb2NjbHVzaW9uUmVkdWNlZFJlY3QpOworICAgICAgICBvbGRUYXJnZXRS
ZWR1Y2VkT2NjbHVzaW9uLmFwcGVuZChvY2NsdXNpb25SZWR1Y2VkUmVjdCk7CisgICAgICAgIGlm
IChvbGRUYXJnZXQtPmhhc1JlcGxpY2EoKSkgeworICAgICAgICAgICAgY29tcHV0ZU9jY2x1c2lv
blJlZHVjZWRSZWN0QmVoaW5kU3VyZmFjZShvbGRUYXJnZXQsIG5ld1RhcmdldCwgb2xkVGFyZ2V0
LT5yZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCksIG9sZFRhcmdldC0+cmVwbGljYVNjcmVlblNwYWNl
VHJhbnNmb3JtKCksIG9jY2x1c2lvblJlZHVjZWRSZWN0KTsKKyAgICAgICAgICAgIG9sZFRhcmdl
dFJlZHVjZWRPY2NsdXNpb24uYXBwZW5kKG9jY2x1c2lvblJlZHVjZWRSZWN0KTsKKyAgICAgICAg
fQorCisgICAgICAgIGFwcGx5UmVkdWNlZE9jY2x1c2lvbihvbGRUYXJnZXRSZWR1Y2VkT2NjbHVz
aW9uLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCwgbV9zdGFjay5sYXN0KCkub2Nj
bHVzaW9uSW5TY3JlZW4pOworICAgICAgICBtX3N0YWNrLmxhc3QoKS5yZWR1Y2VkT2NjbHVzaW9u
LmFwcGVuZChvbGRUYXJnZXRSZWR1Y2VkT2NjbHVzaW9uKTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Cit2b2lkIEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmNvbXB1
dGVPY2NsdXNpb25SZWR1Y2VkUmVjdEJlaGluZFN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZVR5
cGUqIHN1cmZhY2UsIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlVGFyZ2V0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGFyZ2V0VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgc2NyZWVuVHJhbnNmb3JtLCBPY2NsdXNpb25SZWR1Y2VkUmVjdCYgb2NjbHVz
aW9uUmVkdWNlZFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBib3VuZHNJblRhcmdldCA9IGVu
Y2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QodGFyZ2V0VHJhbnNmb3Jt
LCBGbG9hdFJlY3Qoc3VyZmFjZS0+Y29udGVudFJlY3QoKSkpKTsKKyAgICBpZiAoIXN1cmZhY2Ut
PmNsaXBSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICBib3VuZHNJblRhcmdldC5pbnRlcnNlY3Qo
c3VyZmFjZS0+Y2xpcFJlY3QoKSk7CisKKyAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwg
b3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgIHN1cmZhY2UtPmJhY2tncm91bmRGaWx0ZXJz
KCkuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNl
dExlZnQpOworCisgICAgLy8gVGhlIGZpbHRlciBjYW4gbW92ZSBwaXhlbHMgZnJvbSBvdXRzaWRl
IG9mIHRoZSBjbGlwLCBzbyBhbGxvdyBlZmZlY3RlZEFyZWEgdG8gZXhwYW5kIG91dHNpZGUgdGhl
IGNsaXAuCisgICAgYm91bmRzSW5UYXJnZXQubW92ZSgtb3V0c2V0TGVmdCwgLW91dHNldFRvcCk7
CisgICAgYm91bmRzSW5UYXJnZXQuZXhwYW5kKG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwgb3V0
c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKworICAgIEludFJlY3QgYm91bmRzSW5TY3JlZW4gPSBl
bmNsb3NpbmdJbnRSZWN0KENDTWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0KHN1cmZhY2VUYXJnZXQt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIEZsb2F0UmVjdChib3VuZHNJblRhcmdldCkpKTsKKwor
ICAgIEludFJlY3QgZmlsdGVyT3V0c2V0c0luVGFyZ2V0KC1vdXRzZXRMZWZ0LCAtb3V0c2V0VG9w
LCBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIG91dHNldFRvcCArIG91dHNldEJvdHRvbSk7Cisg
ICAgSW50UmVjdCBmaWx0ZXJPdXRzZXRzSW5TY3JlZW4gPSBlbmNsb3NpbmdJbnRSZWN0KENDTWF0
aFV0aWw6Om1hcENsaXBwZWRSZWN0KHN1cmZhY2VUYXJnZXQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCksIEZsb2F0UmVjdChmaWx0ZXJPdXRzZXRzSW5UYXJnZXQpKSk7CisKKyAgICBvY2NsdXNpb25S
ZWR1Y2VkUmVjdC5waXhlbEV4cGFuZGVkSW5UYXJnZXQgPSBmaWx0ZXJPdXRzZXRzSW5UYXJnZXQ7
CisgICAgb2NjbHVzaW9uUmVkdWNlZFJlY3QuZWZmZWN0ZWRBcmVhSW5UYXJnZXQgPSBib3VuZHNJ
blRhcmdldDsKKyAgICBvY2NsdXNpb25SZWR1Y2VkUmVjdC5waXhlbEV4cGFuZGVkSW5TY3JlZW4g
PSBmaWx0ZXJPdXRzZXRzSW5TY3JlZW47CisgICAgb2NjbHVzaW9uUmVkdWNlZFJlY3QuZWZmZWN0
ZWRBcmVhSW5TY3JlZW4gPSBib3VuZHNJblNjcmVlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IHJlZHVjZU9jY2x1c2lvbihjb25zdCBJbnRSZWN0JiBlZmZlY3RlZEFyZWEsIGNvbnN0IEludFJl
Y3QmIHBpeGVsRXhwYW5kZWQsIFJlZ2lvbiYgb2NjbHVzaW9uKQoreworICAgIGlmICghZWZmZWN0
ZWRBcmVhLmludGVyc2VjdHMob2NjbHVzaW9uLmJvdW5kcygpKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVnaW9uIGVmZmVjdGVkT2NjbHVzaW9uID0gaW50ZXJzZWN0KG9jY2x1c2lvbiwgZWZm
ZWN0ZWRBcmVhKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gZWZmZWN0ZWRPY2NsdXNpb25SZWN0cyA9
IGVmZmVjdGVkT2NjbHVzaW9uLnJlY3RzKCk7CisKKyAgICBvY2NsdXNpb24uc3VidHJhY3QoZWZm
ZWN0ZWRBcmVhKTsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGVmZmVjdGVkT2NjbHVzaW9u
UmVjdHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgSW50UmVjdCYgb2NjbHVzaW9uUmVjdCA9IGVm
ZmVjdGVkT2NjbHVzaW9uUmVjdHNbal07CisKKyAgICAgICAgLy8gU2hyaW5rIHRoZSByZWN0IGJ5
IGV4cGFuZGluZyB0aGUgbm9uLW9wYXF1ZSBwaXhlbHMgb3V0c2lkZSB0aGUgcmVjdC4KKyAgICAg
ICAgLy8gVG8gY29udmVydCB0aGUgcGl4ZWxFeHBhbmRlZCBJbnRSZWN0IHRvIG91dHNldHM6Cisg
ICAgICAgIC8vIHggPSAtbGVmdE91dHNldAorICAgICAgICAvLyB3aWR0aCA9IGxlZnRPdXRzZXQg
KyByaWdodE91dHNldAorICAgICAgICAvLyBtYXhYID0geCArIHdpZHRoID0gLWxlZnRPdXRzZXQg
KyBsZWZ0T3V0c2V0ICsgcmlnaHRPdXRzZXQgPSByaWdodE91dHNldAorCisgICAgICAgIC8vIFRo
ZSBsZWZ0T3V0c2V0IG9mIHRoZSBmaWx0ZXJzIG1vdmVzIHBpeGVscyBvbiB0aGUgcmlnaHQgc2lk
ZSBvZgorICAgICAgICAvLyB0aGUgb2NjbHVzaW9uUmVjdCBpbnRvIGl0LCBzaHJpbmtpbmcgaXRz
IHJpZ2h0IGVkZ2UuCisgICAgICAgIGludCBzaHJpbmtMZWZ0ID0gb2NjbHVzaW9uUmVjdC54KCkg
PT0gZWZmZWN0ZWRBcmVhLngoKSA/IDAgOiBwaXhlbEV4cGFuZGVkLm1heFgoKTsKKyAgICAgICAg
aW50IHNocmlua1RvcCA9IG9jY2x1c2lvblJlY3QueSgpID09IGVmZmVjdGVkQXJlYS55KCkgPyAw
IDogcGl4ZWxFeHBhbmRlZC5tYXhZKCk7CisgICAgICAgIGludCBzaHJpbmtSaWdodCA9IG9jY2x1
c2lvblJlY3QubWF4WCgpID09IGVmZmVjdGVkQXJlYS5tYXhYKCkgPyAwIDogLXBpeGVsRXhwYW5k
ZWQueCgpOworICAgICAgICBpbnQgc2hyaW5rQm90dG9tID0gb2NjbHVzaW9uUmVjdC5tYXhZKCkg
PT0gZWZmZWN0ZWRBcmVhLm1heFkoKSA/IDAgOiAtcGl4ZWxFeHBhbmRlZC55KCk7CisKKyAgICAg
ICAgb2NjbHVzaW9uUmVjdC5tb3ZlKHNocmlua0xlZnQsIHNocmlua1RvcCk7CisgICAgICAgIG9j
Y2x1c2lvblJlY3QuY29udHJhY3Qoc2hyaW5rTGVmdCArIHNocmlua1JpZ2h0LCBzaHJpbmtUb3Ag
KyBzaHJpbmtCb3R0b20pOworCisgICAgICAgIG9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25SZWN0
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+Cit2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT46OmFwcGx5UmVkdWNlZE9jY2x1c2lvbihjb25zdCBWZWN0b3I8T2Nj
bHVzaW9uUmVkdWNlZFJlY3Q+JiByZWR1Y2VkT2NjbHVzaW9uLCBSZWdpb24mIG9jY2x1c2lvbklu
VGFyZ2V0LCBSZWdpb24mIG9jY2x1c2lvbkluU2NyZWVuKSBjb25zdAoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVkdWNlZE9jY2x1c2lvbi5zaXplKCk7ICsraSkgeworICAgICAgICBj
b25zdCBPY2NsdXNpb25SZWR1Y2VkUmVjdCYgb2NjbHVzaW9uUmVkdWNlZFJlY3QgPSByZWR1Y2Vk
T2NjbHVzaW9uW2ldOworICAgICAgICByZWR1Y2VPY2NsdXNpb24ob2NjbHVzaW9uUmVkdWNlZFJl
Y3QuZWZmZWN0ZWRBcmVhSW5UYXJnZXQsIG9jY2x1c2lvblJlZHVjZWRSZWN0LnBpeGVsRXhwYW5k
ZWRJblRhcmdldCwgb2NjbHVzaW9uSW5UYXJnZXQpOworICAgICAgICByZWR1Y2VPY2NsdXNpb24o
b2NjbHVzaW9uUmVkdWNlZFJlY3QuZWZmZWN0ZWRBcmVhSW5TY3JlZW4sIG9jY2x1c2lvblJlZHVj
ZWRSZWN0LnBpeGVsRXhwYW5kZWRJblNjcmVlbiwgb2NjbHVzaW9uSW5TY3JlZW4pOworICAgIH0K
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgpAQCAtMjY1LDIzICszNTQsMjkgQEAg
dm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+
OjptYXJrT2NjbHVkZWRCZWhpbmRMYXkKICAgICBpZiAob3BhcXVlQ29udGVudHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IHNjaXNzb3JJblRhcmdldCA9IGxheWVy
U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UobGF5ZXIpOworICAgIFJlZ2lvbiBvcGFxdWVJblRh
cmdldDsKKyAgICBSZWdpb24gb3BhcXVlSW5TY3JlZW47CisKKyAgICBJbnRSZWN0IHNjaXNzb3JJ
blRhcmdldFJlY3QgPSBsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKGxheWVyKTsKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRUb1NjcmVlblRyYW5zZm9ybSA9IG1fc3RhY2su
bGFzdCgpLnN1cmZhY2UtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisgICAgYm9vbCBzY2lzc29y
SW5TY3JlZW5DbGlwcGVkOworICAgIEZsb2F0UXVhZCBzY2lzc29ySW5TY3JlZW5RdWFkID0gQ0NN
YXRoVXRpbDo6bWFwUXVhZCh0YXJnZXRUb1NjcmVlblRyYW5zZm9ybSwgRmxvYXRRdWFkKEZsb2F0
UmVjdChzY2lzc29ySW5UYXJnZXRSZWN0KSksIHNjaXNzb3JJblNjcmVlbkNsaXBwZWQpOworICAg
IEludFJlY3Qgc2Npc3NvckluU2NyZWVuUmVjdCA9IGludGVyc2VjdGlvbihtX3NjaXNzb3JSZWN0
SW5TY3JlZW5TcGFjZSwgZW5jbG9zZWRJbnRSZWN0KHNjaXNzb3JJblNjcmVlblF1YWQuYm91bmRp
bmdCb3goKSkpOworCisgICAgLy8gV2UgbXVzdCBjbGlwIHRoZSBvY2NsdXNpb24gd2l0aGluIHRo
ZSBsYXllcidzIHNjaXNzb3JJblRhcmdldCBib3RoIGluIHRhcmdldCBzcGFjZSBhbmQgd2l0aGlu
IHNjcmVlbiBzcGFjZS4KKyAgICAvLyBJZiB0aGUgc2Npc3NvciByZWN0IGNhbid0IGJlIG1vdmVk
IHRvIHNjcmVlbiBzcGFjZSBhbmQgcmVtYWluIHJlY3RpbGluZWFyLCB0aGVuIHdlIGRvbid0IGFk
ZCBhbnkgb2NjbHVzaW9uCisgICAgLy8gaW4gc2NyZWVuIHNwYWNlLgorCiAgICAgaWYgKGxheWVy
VHJhbnNmb3Jtc1RvVGFyZ2V0S25vd24obGF5ZXIpKQotICAgICAgICBtX3N0YWNrLmxhc3QoKS5v
Y2NsdXNpb25JblRhcmdldC51bml0ZShjb21wdXRlT2NjbHVzaW9uQmVoaW5kTGF5ZXI8TGF5ZXJU
eXBlPihsYXllciwgY29udGVudFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxh
eWVyKSwgb3BhcXVlQ29udGVudHMsIHNjaXNzb3JJblRhcmdldCwgbV91c2VQYWludFRyYWNraW5n
KSk7Ci0KLSAgICAvLyBXZSBtdXN0IGNsaXAgdGhlIG9jY2x1c2lvbiB3aXRoaW4gdGhlIGxheWVy
J3Mgc2Npc3NvckluVGFyZ2V0IHdpdGhpbiBzY3JlZW4gc3BhY2UgYXMgd2VsbC4gSWYgdGhlIHNj
aXNzb3IgcmVjdCBjYW4ndCBiZSBtb3ZlZCB0byBzY3JlZW4gc3BhY2UgYW5kCi0gICAgLy8gcmVt
YWluIHJlY3RpbGluZWFyLCB0aGVuIHdlIGRvbid0IGFkZCBhbnkgb2NjbHVzaW9uIGluIHNjcmVl
biBzcGFjZS4KLQotICAgIGlmIChsYXllclRyYW5zZm9ybXNUb1NjcmVlbktub3duKGxheWVyKSkg
ewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRUb1NjcmVlblRyYW5zZm9ybSA9
IG1fc3RhY2subGFzdCgpLnN1cmZhY2UtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7Ci0gICAgICAg
IGJvb2wgY2xpcHBlZDsKLSAgICAgICAgRmxvYXRRdWFkIHNjaXNzb3JJblNjcmVlblF1YWQgPSBD
Q01hdGhVdGlsOjptYXBRdWFkKHRhcmdldFRvU2NyZWVuVHJhbnNmb3JtLCBGbG9hdFF1YWQoRmxv
YXRSZWN0KHNjaXNzb3JJblRhcmdldCkpLCBjbGlwcGVkKTsKLSAgICAgICAgLy8gRklYTUU6IEZp
bmQgYSByZWN0IGludGVyaW9yIHRvIHRoZSB0cmFuc2Zvcm1lZCBzY2lzc29yIHF1YWQuCi0gICAg
ICAgIGlmIChjbGlwcGVkIHx8ICFzY2lzc29ySW5TY3JlZW5RdWFkLmlzUmVjdGlsaW5lYXIoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSW50UmVjdCBzY2lzc29ySW5TY3JlZW5SZWN0
ID0gaW50ZXJzZWN0aW9uKG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBlbmNsb3NlZEludFJl
Y3Qoc2Npc3NvckluU2NyZWVuUXVhZC5ib3VuZGluZ0JveCgpKSk7Ci0gICAgICAgIG1fc3RhY2su
bGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuLnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRMYXll
cjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5
cGU+KGxheWVyKSwgb3BhcXVlQ29udGVudHMsIHNjaXNzb3JJblNjcmVlblJlY3QsIG1fdXNlUGFp
bnRUcmFja2luZykpOwotICAgIH0KKyAgICAgICAgb3BhcXVlSW5UYXJnZXQgPSBjb21wdXRlT2Nj
bHVzaW9uQmVoaW5kTGF5ZXI8TGF5ZXJUeXBlPihsYXllciwgY29udGVudFRvVGFyZ2V0U3VyZmFj
ZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgb3BhcXVlQ29udGVudHMsIHNjaXNzb3JJblRh
cmdldFJlY3QsIG1fdXNlUGFpbnRUcmFja2luZyk7CisgICAgaWYgKGxheWVyVHJhbnNmb3Jtc1Rv
U2NyZWVuS25vd24obGF5ZXIpICYmICFzY2lzc29ySW5TY3JlZW5DbGlwcGVkICYmIHNjaXNzb3JJ
blNjcmVlblF1YWQuaXNSZWN0aWxpbmVhcigpKQorICAgICAgICBvcGFxdWVJblNjcmVlbiA9IGNv
bXB1dGVPY2NsdXNpb25CZWhpbmRMYXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9TY3Jl
ZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgb3BhcXVlQ29udGVudHMsIHNjaXNz
b3JJblNjcmVlblJlY3QsIG1fdXNlUGFpbnRUcmFja2luZyk7CisKKyAgICBib29sIGxheWVyT2Nj
bHVkZXNXaXRoaW5JdHNUYXJnZXRTdXJmYWNlID0gIWxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Cisg
ICAgaWYgKGxheWVyT2NjbHVkZXNXaXRoaW5JdHNUYXJnZXRTdXJmYWNlKQorICAgICAgICBhcHBs
eVJlZHVjZWRPY2NsdXNpb24obV9zdGFjay5sYXN0KCkucmVkdWNlZE9jY2x1c2lvbiwgb3BhcXVl
SW5UYXJnZXQsIG9wYXF1ZUluU2NyZWVuKTsKKyAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25J
blRhcmdldC51bml0ZShvcGFxdWVJblRhcmdldCk7CisgICAgbV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5TY3JlZW4udW5pdGUob3BhcXVlSW5TY3JlZW4pOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IElu
dFJlY3QmIHNjaXNzb3JSZWN0LCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKQEAgLTQyMyw2ICs1
MTgsOCBAQCB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1
bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bGVhdgogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1Rhcmdl
dCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0
IExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyLCBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IGZpbmlzaGVkVGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7Cit0ZW1wbGF0
ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFj
ZUNocm9taXVtPjo6Y29tcHV0ZU9jY2x1c2lvblJlZHVjZWRSZWN0QmVoaW5kU3VyZmFjZShjb25z
dCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qLCBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1
cmZhY2VUYXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0YXJnZXRUcmFuc2Zvcm0s
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzY3JlZW5UcmFuc2Zvcm0sIE9jY2x1c2lvblJl
ZHVjZWRSZWN0JikgY29uc3Q7Cit0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6YXBwbHlSZWR1Y2VkT2NjbHVz
aW9uKGNvbnN0IFZlY3RvcjxPY2NsdXNpb25SZWR1Y2VkUmVjdD4mIHJlZHVjZWRPY2NsdXNpb24s
IFJlZ2lvbiYgb2NjbHVzaW9uSW5UYXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5TY3JlZW4pIGNv
bnN0OwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0s
IFJlbmRlclN1cmZhY2VDaHJvbWl1bT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNvbnN0IExh
eWVyQ2hyb21pdW0qKTsKIHRlbXBsYXRlIGJvb2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXll
ckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpvY2NsdWRlZChjb25zdCBMYXllckNo
cm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgSW50
UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllckNocm9taXVtKiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwpAQCAtNDM1LDYgKzUzMiw4IEBAIHRlbXBs
YXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJm
YWNlPjo6bGVhdmVMYXllcihjCiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShj
b25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmZpbmlzaGVkVGFy
Z2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0IEND
UmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQpOwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7Cit0ZW1wbGF0
ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46OmNvbXB1dGVPY2NsdXNpb25SZWR1Y2VkUmVjdEJlaGluZFN1cmZhY2UoY29uc3QgQ0NSZW5k
ZXJTdXJmYWNlKiwgY29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlVGFyZ2V0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGFyZ2V0VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc2NyZWVuVHJhbnNmb3JtLCBPY2NsdXNpb25SZWR1Y2VkUmVjdCYpIGNvbnN0Owor
dGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRl
clN1cmZhY2U+OjphcHBseVJlZHVjZWRPY2NsdXNpb24oY29uc3QgVmVjdG9yPE9jY2x1c2lvblJl
ZHVjZWRSZWN0PiYgcmVkdWNlZE9jY2x1c2lvbiwgUmVnaW9uJiBvY2NsdXNpb25JblRhcmdldCwg
UmVnaW9uJiBvY2NsdXNpb25JblNjcmVlbikgY29uc3Q7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46Om1hcmtPY2NsdWRl
ZEJlaGluZExheWVyKGNvbnN0IENDTGF5ZXJJbXBsKik7CiB0ZW1wbGF0ZSBib29sIENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46Om9jY2x1ZGVkKGNv
bnN0IENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwogdGVt
cGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRl
clN1cmZhY2U+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJh
Y2tlci5oCmluZGV4IDI3MDVjNmIxMzMxZGZkOTRmYjVhODNmNzA2Y2I0MThmYmUxYWJiNzkuLmQw
NGQ0M2Q2MTA2MDNhOTQ3ODE0ZWM1OWU4NDkzMDI0NWVmZGQ3OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T2NjbHVzaW9uVHJhY2tlci5oCkBAIC03MywxMiArNzMsMjEgQEAgcHVibGljOgogICAgIFJlZ2lv
biBjb21wdXRlVmlzaWJsZVJlZ2lvbkluU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gc3VidHJhY3Qo
UmVnaW9uKG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKSwgbV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5TY3JlZW4pOyB9CiAKIHByb3RlY3RlZDoKKyAgICBzdHJ1Y3QgT2NjbHVzaW9uUmVkdWNl
ZFJlY3QgeworICAgICAgICBJbnRSZWN0IHBpeGVsRXhwYW5kZWRJblRhcmdldDsKKyAgICAgICAg
SW50UmVjdCBlZmZlY3RlZEFyZWFJblRhcmdldDsKKyAgICAgICAgSW50UmVjdCBwaXhlbEV4cGFu
ZGVkSW5TY3JlZW47CisgICAgICAgIEludFJlY3QgZWZmZWN0ZWRBcmVhSW5TY3JlZW47CisgICAg
fTsKKwogICAgIHN0cnVjdCBTdGFja09iamVjdCB7CiAgICAgICAgIFN0YWNrT2JqZWN0KCkgOiBz
dXJmYWNlKDApIHsgfQogICAgICAgICBTdGFja09iamVjdChjb25zdCBSZW5kZXJTdXJmYWNlVHlw
ZSogc3VyZmFjZSkgOiBzdXJmYWNlKHN1cmZhY2UpIHsgfQogICAgICAgICBjb25zdCBSZW5kZXJT
dXJmYWNlVHlwZSogc3VyZmFjZTsKICAgICAgICAgUmVnaW9uIG9jY2x1c2lvbkluU2NyZWVuOwog
ICAgICAgICBSZWdpb24gb2NjbHVzaW9uSW5UYXJnZXQ7CisKKyAgICAgICAgVmVjdG9yPE9jY2x1
c2lvblJlZHVjZWRSZWN0PiByZWR1Y2VkT2NjbHVzaW9uOwogICAgIH07CiAKICAgICAvLyBUaGUg
c3RhY2sgaG9sZHMgb2NjbHVkZWQgcmVnaW9ucyBmb3Igc3VidHJlZXMgaW4gdGhlIFJlbmRlclN1
cmZhY2UtTGF5ZXIgdHJlZSwgc28gdGhhdCB3aGVuIHdlIGxlYXZlIGEgc3VidHJlZSB3ZSBtYXkK
QEAgLTEwOCw2ICsxMTcsMTIgQEAgcHJpdmF0ZToKICAgICAvLyBBZGQgdGhlIGxheWVyJ3Mgb2Nj
bHVzaW9uIHRvIHRoZSB0cmFja2VkIHN0YXRlLgogICAgIHZvaWQgbWFya09jY2x1ZGVkQmVoaW5k
TGF5ZXIoY29uc3QgTGF5ZXJUeXBlKik7CiAKKyAgICAvLyBDb21wdXRlIGFyZWFzIHdoZXJlIGFs
bCBvY2NsdXNpb24gaXMgcmVkdWNlZCBieSBleHBhbmRpbmcgdGhlIG5vbi1vcGFxdWUgcGl4ZWxz
IG91dHNpZGUgdGhlIG9jY2x1c2lvbi4KKyAgICB2b2lkIGNvbXB1dGVPY2NsdXNpb25SZWR1Y2Vk
UmVjdEJlaGluZFN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqLCBjb25zdCBSZW5kZXJT
dXJmYWNlVHlwZSogc3VyZmFjZVRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRh
cmdldFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblRyYW5zZm9y
bSwgT2NjbHVzaW9uUmVkdWNlZFJlY3QmKSBjb25zdDsKKworICAgIC8vIFJlZHVjZSBvY2NsdXNp
b24gZnJvbSBmaWx0ZXJzIG1vdmluZyBwaXhlbHMuCisgICAgdm9pZCBhcHBseVJlZHVjZWRPY2Ns
dXNpb24oY29uc3QgVmVjdG9yPE9jY2x1c2lvblJlZHVjZWRSZWN0PiYgcmVkdWNlZE9jY2x1c2lv
biwgUmVnaW9uJiBvY2NsdXNpb25JblRhcmdldCwgUmVnaW9uJiBvY2NsdXNpb25JblNjcmVlbikg
Y29uc3Q7CisKICAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlOwogICAgIE93
blB0cjxDQ092ZXJkcmF3TWV0cmljcz4gbV9vdmVyZHJhd01ldHJpY3M7CiAgICAgYm9vbCBtX3Vz
ZVBhaW50VHJhY2tpbmc7IC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIHBhaW50IHRyYWNraW5n
IGlzIG9uIGZvciBwYWludCBjdWxsaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKaW5kZXggNDFmYjVhNTFmNTRl
NmU1MmY1MmVmMWUxZDJiOWQ3Njk2MmJlMDFiZS4uM2M1NTczYmJjODQ1YmZlMDZjMGJhYzMxZTQ2
NmNiNTMyMzU5OTllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCkBAIC0yMzg3LDggKzIzODcsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwg
MCwgMTAwMCwgMTAwMCkpOwogCiAgICAgICAgIC8vIHx0b3Btb3N0fCBvY2NsdWRlcyBldmVyeXRo
aW5nIHBhcnRpYWxseSBzbyB3ZSBrbm93IG9jY2x1c2lvbiBpcyBoYXBwZW5pbmcgYXQgYWxsLgot
ICAgICAgICB0aGlzLT5lbnRlckxheWVyKHRvcG1vc3QsIG9jY2x1c2lvbik7Ci0gICAgICAgIHRo
aXMtPmxlYXZlTGF5ZXIodG9wbW9zdCwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRM
YXllcih0b3Btb3N0LCBvY2NsdXNpb24pOwogCiAgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMCwgMCwgODAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CiAgICAgICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CkBAIC0yNDIxLDQgKzI0MjAsNDQ1IEBAIHByb3RlY3Rl
ZDoKIAogQUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3RT
dXJmYWNlQ2hpbGRPZkNsaXBwaW5nU3VyZmFjZSk7CiAKK3RlbXBsYXRlPGNsYXNzIFR5cGVzLCBi
b29sIG9wYXF1ZUxheWVycz4KK2NsYXNzIENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVk
ZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXIgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdDxUeXBlcywgb3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5N
eVRlc3QoKQorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVCeUhhbGY7
CisgICAgICAgIHNjYWxlQnlIYWxmLnNjYWxlKDAuNSk7CisKKyAgICAgICAgLy8gTWFrZSBhIHN1
cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUweDUwLCB0aGF0IGFyZSBjb21wbGV0ZWx5IHN1
cnJvdW5kZWQgYnkgb3BhcXVlIGxheWVycyB3aGljaCBhcmUgYWJvdmUgdGhlbSBpbiB0aGUgei1v
cmRlci4KKyAgICAgICAgLy8gVGhlIHN1cmZhY2UgaXMgc2NhbGVkIHRvIHRlc3QgdGhhdCB0aGUg
cGl4ZWwgbW92aW5nIGlzIGRvbmUgaW4gdGhlIHRhcmdldCBzcGFjZSwgd2hlcmUgdGhlIGJhY2tn
cm91bmQgZmlsdGVyIGlzIGFwcGxpZWQsIGJ1dCB0aGUgc3VyZmFjZQorICAgICAgICAvLyBhcHBl
YXJzIGF0IDUwLCA1MCBhbmQgdGhlIHJlcGxpY2EgYXQgMjAwLCA1MC4KKyAgICAgICAgdHlwZW5h
bWUgVHlwZXM6OkNvbnRlbnRMYXllclR5cGUqIHBhcmVudCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhp
cy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAxNTApKTsK
KyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogZmlsdGVyZWRTdXJmYWNlID0gdGhp
cy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgc2NhbGVCeUhhbGYsIEZsb2F0UG9pbnQoNTAs
IDUwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICAgICAgdGhpcy0+Y3JlYXRlUmVw
bGljYUxheWVyKGZpbHRlcmVkU3VyZmFjZSwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMzAwLCAwKSwgSW50U2l6ZSgpKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlw
ZSogb2NjbHVkaW5nTGF5ZXIxID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhp
cy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCA1MCksIHRy
dWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjIg
PSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAxMDApLCBJbnRTaXplKDMwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlw
ZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXIzID0gdGhpcy0+Y3JlYXRlRHJh
d2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgNTAp
LCBJbnRTaXplKDUwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJU
eXBlKiBvY2NsdWRpbmdMYXllcjQgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0
aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgxMDAsIDUwKSwgSW50U2l6ZSgxMDAsIDUw
KSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xh
eWVyNSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDI1MCwgNTApLCBJbnRTaXplKDUwLCA1MCksIHRydWUpOworCisgICAg
ICAgIC8vIEZpbHRlcnMgbWFrZSB0aGUgbGF5ZXIgb3duIGEgc3VyZmFjZS4KKyAgICAgICAgRmls
dGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBl
bmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgxMCwgV2ViQ29yZTo6Rml4ZWQp
LCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICAgICAgZmlsdGVyZWRTdXJmYWNlLT5zZXRC
YWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKworICAgICAgICAvLyBTYXZlIHRoZSBkaXN0YW5j
ZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBibHVyIGVmZmVjdC4KKyAgICAgICAgaW50IG91dHNldFRv
cCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdDsKKyAgICAgICAgZmlsdGVy
cy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0
TGVmdCk7CisKKyAgICAgICAgdGhpcy0+Y2FsY0RyYXdFdGMocGFyZW50KTsKKworICAgICAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNzb3I8dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlw
ZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZhY2VUeXBlPiBvY2NsdXNpb24oSW50UmVjdCgw
LCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0
KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAgICAgIC8vIFRoZXNlIGxheWVycyBv
Y2NsdWRlIHBpeGVscyBkaXJlY3RseSBiZXNpZGUgdGhlIGZpbHRlcmVkU3VyZmFjZS4gQmVjYXVz
ZSBmaWx0ZXJlZCBzdXJmYWNlIGJsZW5kcyBwaXhlbHMgaW4gYSByYWRpdXMsIGl0IHdpbGwKKyAg
ICAgICAgLy8gbmVlZCB0byBzZWUgc29tZSBvZiB0aGUgcGl4ZWxzICh1cCB0byByYWRpdXMgZmFy
KSB1bmRlcm5lYXRoIHRoZSBvY2NsdWRpbmdMYXllcnMuCisgICAgICAgIHRoaXMtPnZpc2l0TGF5
ZXIob2NjbHVkaW5nTGF5ZXI1LCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVy
KG9jY2x1ZGluZ0xheWVyNCwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihv
Y2NsdWRpbmdMYXllcjMsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2Nj
bHVkaW5nTGF5ZXIyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1
ZGluZ0xheWVyMSwgb2NjbHVzaW9uKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91
bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdl
dFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gRXZlcnl0aGluZyBvdXRz
aWRlIHRoZSBzdXJmYWNlL3JlcGxpY2EgaXMgb2NjbHVkZWQgYnV0IHRoZSBzdXJmYWNlL3JlcGxp
Y2EgaXRzZWxmIGlzIG5vdC4KKyAgICAgICAgdGhpcy0+ZW50ZXJMYXllcihmaWx0ZXJlZFN1cmZh
Y2UsIG9jY2x1c2lvbik7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMSwgMCwgOTks
IDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJ
bnRSZWN0KDEsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDEsIDEwMCwgOTkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVk
U3VyZmFjZSwgSW50UmVjdCgwLCAxLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgwLCAwLCA5OSwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoLTEsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDEwMCwgOTkpLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgwLCAtMSwgMTAwLCAxMDApKSk7
CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMDAgKyAxLCAwLCA5OSwgMTAwKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3Qo
MzAwICsgMSwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MzAwICsgMCwgMSwgMTAwLCA5OSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmls
dGVyZWRTdXJmYWNlLCBJbnRSZWN0KDMwMCArIDAsIDEsIDEwMCwgMTAwKSkpOworICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwMCArIDAsIDAsIDk5LCAxMDApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgzMDAgLSAxLCAwLCAx
MDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMDAgKyAwLCAwLCAx
MDAsIDk5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2Us
IEludFJlY3QoMzAwICsgMCwgLTEsIDEwMCwgMTAwKSkpOworICAgICAgICB0aGlzLT5sZWF2ZUxh
eWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKworICAgICAgICAvLyBUaGUgZmlsdGVy
ZWQgbGF5ZXIvcmVwbGljYSBkb2VzIG5vdCBvY2NsdWRlLgorICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3Bh
Y2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMCwgMCwgMCwgMCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2Uo
KS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVzaW9uLm9jY2x1c2lvbklu
VGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBUaGUgc3VyZmFj
ZSBoYXMgYSBiYWNrZ3JvdW5kIGJsdXIsIHNvIGl0IG5lZWRzIHBpeGVscyB0aGF0IGFyZSBjdXJy
ZW50bHkgY29uc2lkZXJlZCBvY2NsdWRlZCBpbiBvcmRlciB0byBiZSBkcmF3bi4gU28gdGhlIHBp
eGVscworICAgICAgICAvLyBpdCBuZWVkcyBzaG91bGQgYmUgcmVtb3ZlZCBzb21lIHRoZSBvY2Ns
dWRlZCBhcmVhIHNvIHRoYXQgd2hlbiB3ZSBnZXQgdG8gdGhlIHBhcmVudCB0aGV5IGFyZSBkcmF3
bi4KKyAgICAgICAgdGhpcy0+dmlzaXRDb250cmlidXRpbmdTdXJmYWNlKGZpbHRlcmVkU3VyZmFj
ZSwgb2NjbHVzaW9uKTsKKworICAgICAgICB0aGlzLT5lbnRlckxheWVyKHBhcmVudCwgb2NjbHVz
aW9uKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBF
Q1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5z
aXplKCkpOworCisgICAgICAgIEludFJlY3Qgb3V0c2V0UmVjdDsKKyAgICAgICAgSW50UmVjdCB0
ZXN0UmVjdDsKKworICAgICAgICAvLyBOb3RoaW5nIGluIHRoZSBibHVyIG91dHNldHMgZm9yIHRo
ZSBmaWx0ZXJlZFN1cmZhY2UgaXMgb2NjbHVkZWQuCisgICAgICAgIG91dHNldFJlY3QgPSBJbnRS
ZWN0KDUwIC0gb3V0c2V0TGVmdCwgNTAgLSBvdXRzZXRUb3AsIDUwICsgb3V0c2V0TGVmdCArIG91
dHNldFJpZ2h0LCA1MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSk7CisgICAgICAgIHRlc3RS
ZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQsIHRlc3RSZWN0KSk7CisKKyAgICAg
ICAgLy8gU3R1ZmYgb3V0c2lkZSB0aGUgYmx1ciBvdXRzZXRzIGlzIHN0aWxsIG9jY2x1ZGVkIHRo
b3VnaC4KKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5l
eHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0
UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAxKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsK
KyAgICAgICAgdGVzdFJlY3QubW92ZSgtMSwgMCk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgx
LCAwKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0g
b3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAgICAgIHRlc3RS
ZWN0LmV4cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQsIHRlc3RSZWN0KSk7CisKKyAgICAg
ICAgLy8gTm90aGluZyBpbiB0aGUgYmx1ciBvdXRzZXRzIGZvciB0aGUgZmlsdGVyZWRTdXJmYWNl
J3MgcmVwbGljYSBpcyBvY2NsdWRlZC4KKyAgICAgICAgb3V0c2V0UmVjdCA9IEludFJlY3QoMjAw
IC0gb3V0c2V0TGVmdCwgNTAgLSBvdXRzZXRUb3AsIDUwICsgb3V0c2V0TGVmdCArIG91dHNldFJp
Z2h0LCA1MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSk7CisgICAgICAgIHRlc3RSZWN0ID0g
b3V0c2V0UmVjdDsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQsIHRlc3RSZWN0KSk7CisKKyAgICAgICAgLy8g
U3R1ZmYgb3V0c2lkZSB0aGUgYmx1ciBvdXRzZXRzIGlzIHN0aWxsIG9jY2x1ZGVkIHRob3VnaC4K
KyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQo
MSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9
IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQ
RUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAg
ICAgdGVzdFJlY3QubW92ZSgtMSwgMCk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgxLCAwKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0
UmVjdDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAgICAgIHRlc3RSZWN0LmV4
cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob3V0c2V0UmVjdCwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQsIHRlc3RSZWN0KSk7CisgICAgfQorfTsKKwor
QUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250T2Nj
bHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXIpOworCit0ZW1wbGF0ZTxjbGFzcyBU
eXBlcywgYm9vbCBvcGFxdWVMYXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0VHdv
QmFja2dyb3VuZEZpbHRlcnNSZWR1Y2VPY2NsdXNpb25Ud2ljZSA6IHB1YmxpYyBDQ09jY2x1c2lv
blRyYWNrZXJUZXN0PFR5cGVzLCBvcGFxdWVMYXllcnM+IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IHJ1bk15VGVzdCgpCisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZUJ5
SGFsZjsKKyAgICAgICAgc2NhbGVCeUhhbGYuc2NhbGUoMC41KTsKKworICAgICAgICAvLyBNYWtl
cyB0d28gc3VyZmFjZXMgdGhhdCBjb21wbGV0ZWx5IGNvdmVyIHxwYXJlbnR8LiBUaGUgb2NjbHVz
aW9uIGJvdGggYWJvdmUgYW5kIGJlbG93IHRoZSBmaWx0ZXJzIHdpbGwgYmUgcmVkdWNlZCBieSBl
YWNoIG9mIHRoZW0uCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBy
b290ID0gdGhpcy0+Y3JlYXRlUm9vdCh0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSg3NSwgNzUpKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlw
ZSogcGFyZW50ID0gdGhpcy0+Y3JlYXRlU3VyZmFjZShyb290LCBzY2FsZUJ5SGFsZiwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxNTAsIDE1MCkpOworICAgICAgICBwYXJlbnQtPnNldE1hc2tz
VG9Cb3VuZHModHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1
ZGluZ0xheWVyQmVsb3cgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5p
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsK
KyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogZmlsdGVyZWRTdXJmYWNlMSA9IHRo
aXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHNjYWxlQnlIYWxmLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6
TGF5ZXJUeXBlKiBmaWx0ZXJlZFN1cmZhY2UyID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBh
cmVudCwgc2NhbGVCeUhhbGYsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBm
YWxzZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVy
QWJvdmUgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgxMDAsIDEwMCksIEludFNpemUoNTAsIDUwKSwgdHJ1ZSk7CisKKyAg
ICAgICAgLy8gRmlsdGVycyBtYWtlIHRoZSBsYXllcnMgb3duIHN1cmZhY2VzLgorICAgICAgICBG
aWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFw
cGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDMsIFdlYkNvcmU6OkZpeGVk
KSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7CisgICAgICAgIGZpbHRlcmVkU3VyZmFjZTEtPnNl
dEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworICAgICAgICBmaWx0ZXJlZFN1cmZhY2UyLT5z
ZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKworICAgICAgICAvLyBTYXZlIHRoZSBkaXN0
YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBibHVyIGVmZmVjdC4KKyAgICAgICAgaW50IG91dHNl
dFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdDsKKyAgICAgICAgZmls
dGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0
c2V0TGVmdCk7CisKKyAgICAgICAgdGhpcy0+Y2FsY0RyYXdFdGMocm9vdCk7CisKKyAgICAgICAg
VGVzdENDT2NjbHVzaW9uVHJhY2tlcldpdGhTY2lzc29yPHR5cGVuYW1lIFR5cGVzOjpMYXllclR5
cGUsIHR5cGVuYW1lIFR5cGVzOjpSZW5kZXJTdXJmYWNlVHlwZT4gb2NjbHVzaW9uKEludFJlY3Qo
MCwgMCwgMTAwMCwgMTAwMCkpOworICAgICAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVj
dChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKworICAgICAgICB0aGlzLT52aXNpdExheWVy
KG9jY2x1ZGluZ0xheWVyQWJvdmUsIG9jY2x1c2lvbik7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAwIC8gMiwgMTAwIC8gMiwgNTAgLyAyLCA1MCAvIDIpLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDEwMCwgNTAsIDUwKSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIoZmlsdGVyZWRTdXJmYWNlMiwgb2NjbHVzaW9uKTsK
KyAgICAgICAgdGhpcy0+dmlzaXRDb250cmlidXRpbmdTdXJmYWNlKGZpbHRlcmVkU3VyZmFjZTIs
IG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIoZmlsdGVyZWRTdXJmYWNlMSwg
b2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRDb250cmlidXRpbmdTdXJmYWNlKGZpbHRl
cmVkU3VyZmFjZTEsIG9jY2x1c2lvbik7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2Ns
dWRpbmdMYXllckJlbG93LCBvY2NsdXNpb24pOworCisgICAgICAgIEFTU0VSVF9FUSgydSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAg
IEFTU0VSVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBUZXN0IGV4cGVjdGF0aW9ucyBpbiB0aGUgdGFyZ2V0
LgorICAgICAgICBJbnRSZWN0IGV4cGVjdGVkVG9wTGVmdE9jY2x1c2lvbiA9IEludFJlY3Qob3V0
c2V0UmlnaHQgKiAyLCBvdXRzZXRCb3R0b20gKiAyLCA1MCAtIChvdXRzZXRMZWZ0ICsgb3V0c2V0
UmlnaHQpICogMiwgNTAgLSAob3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKSAqIDIpOworICAgICAg
ICBJbnRSZWN0IGV4cGVjdGVkQm90dG9tUmlnaHRPY2NsdXNpb24gPSBJbnRSZWN0KDEwMCArIG91
dHNldFJpZ2h0ICogMiwgMTAwICsgb3V0c2V0Qm90dG9tICogMiwgNTAgLSAob3V0c2V0TGVmdCAr
IG91dHNldFJpZ2h0KSAqIDIsIDUwIC0gKG91dHNldFRvcCArIG91dHNldEJvdHRvbSkgKiAyKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0ZWRUb3BMZWZ0T2NjbHVzaW9uLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKVswXSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKGV4cGVjdGVkQm90dG9tUmlnaHRPY2NsdXNpb24sIG9jY2x1c2lvbi5vY2NsdXNp
b25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpWzFdKTsKKworICAgICAgICAvLyBUZXN0IGV4cGVj
dGF0aW9ucyBpbiB0aGUgc2NyZWVuLiBUYWtlIHRoZSBjZWlsaW5nIG9mIGhhbGYgb2YgdGhlIG91
dHNldHMuCisgICAgICAgIG91dHNldFRvcCA9IChvdXRzZXRUb3AgKyAxKSAvIDI7CisgICAgICAg
IG91dHNldFJpZ2h0ID0gKG91dHNldFJpZ2h0ICsgMSkgLyAyOworICAgICAgICBvdXRzZXRCb3R0
b20gPSAob3V0c2V0Qm90dG9tICsgMSkgLyAyOworICAgICAgICBvdXRzZXRMZWZ0ID0gKG91dHNl
dExlZnQgKyAxKSAvIDI7CisgICAgICAgIGV4cGVjdGVkVG9wTGVmdE9jY2x1c2lvbiA9IEludFJl
Y3Qob3V0c2V0UmlnaHQgKiAyLCBvdXRzZXRCb3R0b20gKiAyLCA1MCAvIDIgLSAob3V0c2V0TGVm
dCArIG91dHNldFJpZ2h0KSAqIDIsIDUwIC8gMiAtIChvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20p
ICogMik7CisgICAgICAgIGV4cGVjdGVkQm90dG9tUmlnaHRPY2NsdXNpb24gPSBJbnRSZWN0KDEw
MCAvIDIgKyBvdXRzZXRSaWdodCAqIDIsIDEwMCAvIDIgKyBvdXRzZXRCb3R0b20gKiAyLCA1MCAv
IDIgLSAob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0KSAqIDIsIDUwIC8yIC0gKG91dHNldFRvcCAr
IG91dHNldEJvdHRvbSkgKiAyKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZFRv
cExlZnRPY2NsdXNpb24sIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMo
KVswXSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGV4cGVjdGVkQm90dG9tUmlnaHRPY2NsdXNp
b24sIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKVsxXSk7CisgICAg
fQorfTsKKworQUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3RUd29CYWNrZ3JvdW5kRmlsdGVyc1JlZHVjZU9jY2x1c2lvblR3aWNlKTsKKwordGVtcGxhdGU8
Y2xhc3MgVHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3MgQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlcldpdGhDbGlwIDog
cHVibGljIENDT2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9wYXF1ZUxheWVycz4geworcHJv
dGVjdGVkOgorICAgIHZvaWQgcnVuTXlUZXN0KCkKKyAgICB7CisgICAgICAgIC8vIE1ha2UgYSBz
dXJmYWNlIGFuZCBpdHMgcmVwbGljYSwgZWFjaCA1MHg1MCwgdGhhdCBhcmUgY29tcGxldGVseSBz
dXJyb3VuZGVkIGJ5IG9wYXF1ZSBsYXllcnMgd2hpY2ggYXJlIGFib3ZlIHRoZW0gaW4gdGhlIHot
b3JkZXIuCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJlbnQg
PSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDMwMCwgMTUwKSk7CisgICAgICAgIC8vIFdlIHN0aWNrIHRoZSBmaWx0ZXJlZCBz
dXJmYWNlIGluc2lkZSBhIGNsaXBwaW5nIHN1cmZhY2Ugc28gdGhhdCB3ZSBjYW4gbWFrZSBzdXJl
IHRoZSBjbGlwIGlzIGhvbm9yZWQgd2hlbiBleHBvc2luZyBwaXhlbHMgZm9yCisgICAgICAgIC8v
IHRoZSBiYWNrZ3JvdW5kIGZpbHRlci4KKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlw
ZSogY2xpcHBpbmdTdXJmYWNlID0gdGhpcy0+Y3JlYXRlU3VyZmFjZShwYXJlbnQsIHRoaXMtPmlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgNzApKTsKKyAgICAg
ICAgY2xpcHBpbmdTdXJmYWNlLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgICAgICB0eXBl
bmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBmaWx0ZXJlZFN1cmZhY2UgPSB0aGlzLT5jcmVhdGVEcmF3
aW5nTGF5ZXIoY2xpcHBpbmdTdXJmYWNlLCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCg1MCwgNTApLCBJbnRTaXplKDUwLCA1MCksIGZhbHNlKTsKKyAgICAgICAgdGhpcy0+Y3JlYXRl
UmVwbGljYUxheWVyKGZpbHRlcmVkU3VyZmFjZSwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMTUwLCAwKSwgSW50U2l6ZSgpKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVy
VHlwZSogb2NjbHVkaW5nTGF5ZXIxID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwg
dGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCA1MCks
IHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXll
cjIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAxMDApLCBJbnRTaXplKDMwMCwgNTApLCB0cnVlKTsKKyAgICAgICAg
dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXIzID0gdGhpcy0+Y3JlYXRl
RHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
NTApLCBJbnRTaXplKDUwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5
ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjQgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50
LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgxMDAsIDUwKSwgSW50U2l6ZSgxMDAs
IDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGlu
Z0xheWVyNSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDI1MCwgNTApLCBJbnRTaXplKDUwLCA1MCksIHRydWUpOworCisg
ICAgICAgIC8vIEZpbHRlcnMgbWFrZSB0aGUgbGF5ZXIgb3duIGEgc3VyZmFjZS4gVGhpcyBmaWx0
ZXIgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgZ29lcyBvdXRzaWRlIHRoZSBib3R0b20gb2YgdGhl
IGNsaXBwaW5nU3VyZmFjZS4KKyAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAg
ICAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKExlbmd0aCgxMiwgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsK
KyAgICAgICAgZmlsdGVyZWRTdXJmYWNlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsK
KworICAgICAgICAvLyBTYXZlIHRoZSBkaXN0YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBibHVy
IGVmZmVjdC4KKyAgICAgICAgaW50IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRv
bSwgb3V0c2V0TGVmdDsKKyAgICAgICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0
c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisKKyAgICAgICAgdGhpcy0+Y2Fs
Y0RyYXdFdGMocGFyZW50KTsKKworICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNj
aXNzb3I8dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1
cmZhY2VUeXBlPiBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAg
IG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkp
OworCisgICAgICAgIC8vIFRoZXNlIGxheWVycyBvY2NsdWRlIHBpeGVscyBkaXJlY3RseSBiZXNp
ZGUgdGhlIGZpbHRlcmVkU3VyZmFjZS4gQmVjYXVzZSBmaWx0ZXJlZCBzdXJmYWNlIGJsZW5kcyBw
aXhlbHMgaW4gYSByYWRpdXMsIGl0IHdpbGwKKyAgICAgICAgLy8gbmVlZCB0byBzZWUgc29tZSBv
ZiB0aGUgcGl4ZWxzICh1cCB0byByYWRpdXMgZmFyKSB1bmRlcm5lYXRoIHRoZSBvY2NsdWRpbmdM
YXllcnMuCisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXI1LCBvY2NsdXNp
b24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyNCwgb2NjbHVzaW9u
KTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjMsIG9jY2x1c2lvbik7
CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXIyLCBvY2NsdXNpb24pOwor
ICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyMSwgb2NjbHVzaW9uKTsKKwor
ICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1
dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24u
b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
NXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7
CisKKyAgICAgICAgLy8gRXZlcnl0aGluZyBvdXRzaWRlIHRoZSBzdXJmYWNlL3JlcGxpY2EgaXMg
b2NjbHVkZWQgYnV0IHRoZSBzdXJmYWNlL3JlcGxpY2EgaXRzZWxmIGlzIG5vdC4KKyAgICAgICAg
dGhpcy0+ZW50ZXJMYXllcihmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMSwgMCwgNDksIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMSwgMCwgNTAsIDUwKSkpOworICAg
ICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDEsIDUwLCA0OSksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDAsIDEsIDUwLCA1MCkp
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA0OSwgNTApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgtMSwgMCwg
NTAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDUwLCA0OSks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0
KDAsIC0xLCA1MCwgNTApKSk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxNTAg
KyAxLCAwLCA0OSwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVk
U3VyZmFjZSwgSW50UmVjdCgxNTAgKyAxLCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMTUwICsgMCwgMSwgNTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMTUwICsgMCwgMSwgNTAsIDUwKSkp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDE1MCArIDAsIDAsIDQ5LCA1MCksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1
MCAtIDEsIDAsIDUwLCA1MCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxNTAg
KyAwLCAwLCA1MCwgNDkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVk
U3VyZmFjZSwgSW50UmVjdCgxNTAgKyAwLCAtMSwgNTAsIDUwKSkpOworICAgICAgICB0aGlzLT5s
ZWF2ZUxheWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKworICAgICAgICAvLyBUaGUg
ZmlsdGVyZWQgbGF5ZXIvcmVwbGljYSBkb2VzIG5vdCBvY2NsdWRlLgorICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1
cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgb2NjbHVzaW9uLm9jY2x1
c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBUaGUg
c3VyZmFjZSBoYXMgYSBiYWNrZ3JvdW5kIGJsdXIsIHNvIGl0IG5lZWRzIHBpeGVscyB0aGF0IGFy
ZSBjdXJyZW50bHkgY29uc2lkZXJlZCBvY2NsdWRlZCBpbiBvcmRlciB0byBiZSBkcmF3bi4gU28g
dGhlIHBpeGVscworICAgICAgICAvLyBpdCBuZWVkcyBzaG91bGQgYmUgcmVtb3ZlZCBzb21lIHRo
ZSBvY2NsdWRlZCBhcmVhIHNvIHRoYXQgd2hlbiB3ZSBnZXQgdG8gdGhlIHBhcmVudCB0aGV5IGFy
ZSBkcmF3bi4KKyAgICAgICAgdGhpcy0+dmlzaXRDb250cmlidXRpbmdTdXJmYWNlKGZpbHRlcmVk
U3VyZmFjZSwgb2NjbHVzaW9uKTsKKworICAgICAgICB0aGlzLT5lbnRlckNvbnRyaWJ1dGluZ1N1
cmZhY2UoY2xpcHBpbmdTdXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3Bh
Y2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lv
bkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgSW50UmVjdCBvdXRz
ZXRSZWN0OworICAgICAgICBJbnRSZWN0IGNsaXBwZWRPdXRzZXRSZWN0OworICAgICAgICBJbnRS
ZWN0IHRlc3RSZWN0OworCisgICAgICAgIC8vIE5vdGhpbmcgaW4gdGhlIChjbGlwcGVkKSBibHVy
IG91dHNldHMgZm9yIHRoZSBmaWx0ZXJlZFN1cmZhY2UgaXMgb2NjbHVkZWQuCisgICAgICAgIG91
dHNldFJlY3QgPSBJbnRSZWN0KDUwIC0gb3V0c2V0TGVmdCwgNTAgLSBvdXRzZXRUb3AsIDUwICsg
b3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCA1MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSk7
CisgICAgICAgIGNsaXBwZWRPdXRzZXRSZWN0ID0gaW50ZXJzZWN0aW9uKG91dHNldFJlY3QsIElu
dFJlY3QoMCAtIG91dHNldExlZnQsIDAgLSBvdXRzZXRUb3AsIDMwMCArIG91dHNldExlZnQgKyBv
dXRzZXRSaWdodCwgNzAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pKTsKKyAgICAgICAgdGVz
dFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0
UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRl
c3RSZWN0KSk7CisKKyAgICAgICAgLy8gU3R1ZmYgb3V0c2lkZSB0aGUgKGNsaXBwZWQpIGJsdXIg
b3V0c2V0cyBpcyBzdGlsbCBvY2NsdWRlZCB0aG91Z2guCisgICAgICAgIHRlc3RSZWN0ID0gb3V0
c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0
UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDAsIDEpOworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChj
bGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVj
dDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgtMSwgMCk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFu
ZCgxLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOwor
ICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwg
LTEpOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNs
aXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBOb3RoaW5nIGluIHRoZSAo
Y2xpcHBlZCkgYmx1ciBvdXRzZXRzIGZvciB0aGUgZmlsdGVyZWRTdXJmYWNlJ3MgcmVwbGljYSBp
cyBvY2NsdWRlZC4KKyAgICAgICAgb3V0c2V0UmVjdCA9IEludFJlY3QoMjAwIC0gb3V0c2V0TGVm
dCwgNTAgLSBvdXRzZXRUb3AsIDUwICsgb3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCA1MCArIG91
dHNldFRvcCArIG91dHNldEJvdHRvbSk7CisgICAgICAgIGNsaXBwZWRPdXRzZXRSZWN0ID0gaW50
ZXJzZWN0aW9uKG91dHNldFJlY3QsIEludFJlY3QoMCAtIG91dHNldExlZnQsIDAgLSBvdXRzZXRU
b3AsIDMwMCArIG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwgNzAgKyBvdXRzZXRUb3AgKyBvdXRz
ZXRCb3R0b20pKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisKKyAgICAgICAgLy8gU3R1ZmYgb3V0
c2lkZSB0aGUgKGNsaXBwZWQpIGJsdXIgb3V0c2V0cyBpcyBzdGlsbCBvY2NsdWRlZCB0aG91Z2gu
CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5k
KDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7Cisg
ICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDAs
IDEpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAg
ICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgtMSwgMCk7
CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgxLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
Y2xpcHBlZE91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBp
bmdTdXJmYWNlLCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7Cisg
ICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwgLTEpOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwg
MSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICB9
Cit9OworCitBTExfQ0NPQ0NMVVNJT05UUkFDS0VSX1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlcldpdGhDbGlwKTsKKwor
dGVtcGxhdGU8Y2xhc3MgVHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3MgQ0NPY2NsdXNp
b25UcmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvbkJlbG93QmFja2dyb3VuZEZpbHRlciA6IHB1Ymxp
YyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0PFR5cGVzLCBvcGFxdWVMYXllcnM+IHsKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIHJ1bk15VGVzdCgpCisgICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzY2FsZUJ5SGFsZjsKKyAgICAgICAgc2NhbGVCeUhhbGYuc2NhbGUoMC41KTsKKworICAg
ICAgICAvLyBNYWtlIGEgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EsIGVhY2ggNTB4NTAsIHRoYXQg
YXJlIGNvbXBsZXRlbHkgc3Vycm91bmRlZCBieSBvcGFxdWUgbGF5ZXJzIHdoaWNoIGFyZSBhYm92
ZSB0aGVtIGluIHRoZSB6LW9yZGVyLgorICAgICAgICAvLyBUaGUgc3VyZmFjZSBpcyBzY2FsZWQg
dG8gdGVzdCB0aGF0IHRoZSBwaXhlbCBtb3ZpbmcgaXMgZG9uZSBpbiB0aGUgdGFyZ2V0IHNwYWNl
LCB3aGVyZSB0aGUgYmFja2dyb3VuZCBmaWx0ZXIgaXMgYXBwbGllZCwgYnV0IHRoZSBzdXJmYWNl
CisgICAgICAgIC8vIGFwcGVhcnMgYXQgNTAsIDUwIGFuZCB0aGUgcmVwbGljYSBhdCAyMDAsIDUw
LgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExheWVyVHlwZSogcGFyZW50ID0gdGhp
cy0+Y3JlYXRlUm9vdCh0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgzMDAsIDE1MCkpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZWhp
bmRTdXJmYWNlTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5p
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCg2MCwgNjApLCBJbnRTaXplKDMwLCAzMCksIHRydWUp
OworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZWhpbmRSZXBsaWNhTGF5ZXIg
PSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgyMTAsIDYwKSwgSW50U2l6ZSgzMCwgMzApLCB0cnVlKTsKKyAgICAgICAgdHlw
ZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogZmlsdGVyZWRTdXJmYWNlID0gdGhpcy0+Y3JlYXRlRHJh
d2luZ0xheWVyKHBhcmVudCwgc2NhbGVCeUhhbGYsIEZsb2F0UG9pbnQoNTAsIDUwKSwgSW50U2l6
ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICAgICAgdGhpcy0+Y3JlYXRlUmVwbGljYUxheWVyKGZp
bHRlcmVkU3VyZmFjZSwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMzAwLCAwKSwg
SW50U2l6ZSgpKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1
cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVy
cy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
MywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICAgICAgZmls
dGVyZWRTdXJmYWNlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKworICAgICAgICAv
LyBTYXZlIHRoZSBkaXN0YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBibHVyIGVmZmVjdC4KKyAg
ICAgICAgaW50IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVm
dDsKKyAgICAgICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91
dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisKKyAgICAgICAgdGhpcy0+Y2FsY0RyYXdFdGMocGFy
ZW50KTsKKworICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNzb3I8dHlwZW5h
bWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZhY2VUeXBlPiBv
Y2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9jY2x1c2lvbi5z
ZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAgICAg
IC8vIFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwgc28gaXQgYmx1cnMgbm9uLW9w
YXF1ZSBwaXhlbHMgYmVsb3cgaXQuCisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIoZmlsdGVyZWRT
dXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGluZ1N1cmZh
Y2UoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIHRoaXMtPnZpc2l0TGF5
ZXIoYmVoaW5kUmVwbGljYUxheWVyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExh
eWVyKGJlaGluZFN1cmZhY2VMYXllciwgb2NjbHVzaW9uKTsKKworICAgICAgICAvLyBOb24tb3Bh
cXVlIHBpeGVscyBhcmUgYmx1cnJlZCBpbnRvIHRoZSBsYXllcnMgYmVoaW5kIHRoZSBmaWx0ZXJl
ZFN1cmZhY2UuCisgICAgICAgIEludFJlY3QgaW5zZXRCZWhpbmRTdXJmYWNlID0gSW50UmVjdCg2
MCwgNjAsIDMwLCAzMCk7CisgICAgICAgIGluc2V0QmVoaW5kU3VyZmFjZS5tb3ZlKG91dHNldFJp
Z2h0LCBvdXRzZXRCb3R0b20pOworICAgICAgICBpbnNldEJlaGluZFN1cmZhY2UuY29udHJhY3Qo
b3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworCisg
ICAgICAgIEludFJlY3QgaW5zZXRCZWhpbmRSZXBsaWNhID0gSW50UmVjdCgyMTAsIDYwLCAzMCwg
MzApOworICAgICAgICBpbnNldEJlaGluZFJlcGxpY2EubW92ZShvdXRzZXRSaWdodCwgb3V0c2V0
Qm90dG9tKTsKKyAgICAgICAgaW5zZXRCZWhpbmRSZXBsaWNhLmNvbnRyYWN0KG91dHNldExlZnQg
KyBvdXRzZXRSaWdodCwgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKworICAgICAgICBJbnRS
ZWN0IGV4cGVjdGVkT3BhcXVlQm91bmRzID0gdW5pb25SZWN0KGluc2V0QmVoaW5kU3VyZmFjZSwg
aW5zZXRCZWhpbmRSZXBsaWNhKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0ZWRPcGFx
dWVCb3VuZHMsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9wYXF1ZUJv
dW5kcywgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmls
dGVyKTsKKwordGVtcGxhdGU8Y2xhc3MgVHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3Mg
Q0NPY2NsdXNpb25UcmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvblBhcnRpYWxseUJlbG93QmFja2dy
b3VuZEZpbHRlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0PFR5cGVzLCBvcGFxdWVM
YXllcnM+IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHJ1bk15VGVzdCgpCisgICAgeworICAgICAg
ICAvLyBNYWtlIGEgc3VyZmFjZSB0aGF0IGlzIGNlbnRlcmVkIGluIHBhcmVudCBhbmQgc2l6ZSA1
MHg1MC4gVGhlIGxheWVyIGJlbG93IGlzIHBhcnRpYWxseSB1bmRlciB0aGUgc3VyZmFjZSBhbmQg
cGFydGlhbGx5IG5vdC4KKyAgICAgICAgLy8gVGhlIGJsdXJyaW5nIG9mIHRoZSBzdXJmYWNlIHNo
b3VsZCByZWR1Y2UgdGhlIG9jY2x1c2lvbiBmcm9tIHRoZSBsYXllciBiZWxvdywgd2l0aG91dCBz
ZXBhcmF0aW5nIHRoYXQgb2NjbHVzaW9uIGludG8gdHdvCisgICAgICAgIC8vIHBpZWNlcyAob25l
IHVuZGVybmVhdGggdGhlIHN1cmZhY2UgYW5kIG9uZSBub3QpLgorICAgICAgICB0eXBlbmFtZSBU
eXBlczo6Q29udGVudExheWVyVHlwZSogcGFyZW50ID0gdGhpcy0+Y3JlYXRlUm9vdCh0aGlzLT5p
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxNTAsIDE1MCkpOworICAg
ICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZWhpbmRTdXJmYWNlTGF5ZXIgPSB0aGlz
LT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCg3NSwgNzUpLCBJbnRTaXplKDUwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBU
eXBlczo6TGF5ZXJUeXBlKiBmaWx0ZXJlZFN1cmZhY2UgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5
ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCg1MCwgNTApLCBJbnRT
aXplKDUwLCA1MCksIGZhbHNlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVy
IG93biBhIHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAg
ICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAg
ICAgICAgZmlsdGVyZWRTdXJmYWNlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKwor
ICAgICAgICAvLyBTYXZlIHRoZSBkaXN0YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBibHVyIGVm
ZmVjdC4KKyAgICAgICAgaW50IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwg
b3V0c2V0TGVmdDsKKyAgICAgICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0
UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisKKyAgICAgICAgdGhpcy0+Y2FsY0Ry
YXdFdGMocGFyZW50KTsKKworICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNz
b3I8dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZh
Y2VUeXBlPiBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9j
Y2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOwor
CisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwgc28gaXQgYmx1
cnMgbm9uLW9wYXF1ZSBwaXhlbHMgYmVsb3cgaXQuCisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIo
ZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1
dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIHRoaXMt
PnZpc2l0TGF5ZXIoYmVoaW5kU3VyZmFjZUxheWVyLCBvY2NsdXNpb24pOworCisgICAgICAgIC8v
IEJ1dCBOb24tb3BhcXVlIHBpeGVscyBhcmUgYmx1cnJlZCBpbnRvIHRoZSBsYXllciBiZWhpbmQg
dGhlIGZpbHRlcmVkU3VyZmFjZS4KKyAgICAgICAgLy8gUGl4ZWxzIG91dHNpZGUgb2YgdGhlIGJs
dXIgYXJlYSBzaG91bGQgbm90IGJlIGJsdXJyZWQgaW50byB0aGUgb2NjbHVzaW9uIGhvd2V2ZXIu
CisgICAgICAgIEludFJlY3Qgb3JpZ2luYWxPY2NsdXNpb24gPSBJbnRSZWN0KDc1LCA3NSwgNTAs
IDUwKTsKKyAgICAgICAgSW50UmVjdCBibHVyRWZmZWN0ZWRBcmVhID0gSW50UmVjdCg1MCAtIG91
dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwg
NTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworCisgICAgICAgIC8vIFRoZSBwaXhlbHMg
b3V0c2lkZSBvZiB0aGUgYmx1ciBhcmUgbm90IGVmZmVjdGVkLCBzbyB0aGUgYm91bmRzIG9mIHRo
ZSBvY2NsdXNpb24gcmVtYWluIHRoZSBzYW1lLgorICAgICAgICBFWFBFQ1RfRVFfUkVDVChvcmln
aW5hbE9jY2x1c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG9yaWdpbmFsT2NjbHVzaW9uLCBvY2NsdXNpb24u
b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworCisgICAgICAgIC8vIFRoaXMg
b2NjbHVzaW9uIGlzIGJsdXJyZWQgYXdheSBmcm9tIHRoZSBsZWZ0L3RvcCBzaW5jZSB0aG9zZSBl
ZGdlcyBhcmUgYmx1cnJlZCB1bmRlcm5lYXRoCisgICAgICAgIC8vIHRoZSBzdXJmYWNlLiBCdXQg
dGhlIHJpZ2h0L2JvdHRvbSBlZGdlcyBkaWQgYW5kIHNob3VsZCBjb250aW51ZSB0byBleHRlbmQg
cmlnaHQgdG8gdGhlCisgICAgICAgIC8vIGVkZ2Ugb2YgdGhlIGJsdXIsIGFuZCBub3QgYmUgcmVk
dWNlZC4KKyAgICAgICAgSW50UmVjdCBvY2NsdXNpb25SZWR1Y2VkQnlCbHVyID0gb3JpZ2luYWxP
Y2NsdXNpb247CisgICAgICAgIG9jY2x1c2lvblJlZHVjZWRCeUJsdXIubW92ZShvdXRzZXRSaWdo
dCwgb3V0c2V0Qm90dG9tKTsKKyAgICAgICAgb2NjbHVzaW9uUmVkdWNlZEJ5Qmx1ci5pbnRlcnNl
Y3QoYmx1ckVmZmVjdGVkQXJlYSk7CisKKyAgICAgICAgUmVnaW9uIGV4cGVjdGVkT2NjbHVzaW9u
KG9yaWdpbmFsT2NjbHVzaW9uKTsKKyAgICAgICAgZXhwZWN0ZWRPY2NsdXNpb24uc3VidHJhY3Qo
Ymx1ckVmZmVjdGVkQXJlYSk7CisgICAgICAgIGV4cGVjdGVkT2NjbHVzaW9uLnVuaXRlKG9jY2x1
c2lvblJlZHVjZWRCeUJsdXIpOworCisgICAgICAgIEFTU0VSVF9FUSgzdSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9F
USgzdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IHNjcmVlblJlY3RzID0gb2NjbHVzaW9uLm9jY2x1
c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gdGFy
Z2V0UmVjdHMgPSBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIEVYUEVD
VF9FUV9SRUNUKGV4cGVjdGVkT2NjbHVzaW9uLnJlY3RzKClbaV0sIHNjcmVlblJlY3RzW2ldKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUV9SRUNUKGV4cGVjdGVkT2NjbHVzaW9uLnJlY3RzKClbaV0s
IHRhcmdldFJlY3RzW2ldKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lP
TlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVzaW9uUGFydGlh
bGx5QmVsb3dCYWNrZ3JvdW5kRmlsdGVyKTsKKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139666</attachid>
            <date>2012-05-01 13:27:31 -0700</date>
            <delta_ts>2012-05-02 16:08:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84317-20120501162730.patch</filename>
            <type>text/plain</type>
            <size>34177</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAwMmNkOTJiM2Y1ZmYy
MzZhMzg2ZGQzNzUxNjc3ODEyMGEyN2VjMDNkLi41MmZlZjdmNjUwNjlhZmEyYTc4N2YxMWM3M2Zm
NjM5OTdiNWJlYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNS0wMSAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEg
YmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaDoKKwog
MjAxMi0wNC0yNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gU2VwYXJhdGUgSU9TdXJmYWNlIGxheWVyIHR5cGUgZnJvbSB0ZXh0dXJl
IGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQxNTdkNmMwNjAwNmMzZmYxNzc2NTViNGJmZjEzZmE1YjVh
ZTc1ZmIuLmE5NDAyMDBjZTQzOTEzOTI1MmNkNjBiNjIyNGE1OTQxNjAwYTcyZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMi0wNS0wMSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIERvbid0IG9jY2x1ZGUgcGl4ZWxzIGlu
IGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEgYmFja2dyb3VuZCBmaWx0ZXIgYmx1cgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbHVyIGZpbHRl
cnMgbW92ZSBwaXhlbHMgYXJvdW5kLCBzbyBhIHBpeGVsIGNhbiBpbmZsdWVuY2UgdGhlIHZhbHVl
IG9mCisgICAgICAgIHBpeGVscyBhdCBzb21lIGRpc3RhbmNlIGF3YXkuIElmIGEgcGl4ZWwgaXMg
bm90IG9jY2x1ZGVkLCB0aGVuIGFsbAorICAgICAgICBwaXhlbHMgd2l0aGluIHRoZSByYWRpdXMg
b2YgdGhlIGJsdXIgbWF5IGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgdGhhdAorICAgICAgICBwaXhl
bCwgc28gdGhleSBzaG91bGQgYWxzbyBzdGF5IHVub2NjbHVkZWQuCisKKyAgICAgICAgRm9yIGJh
Y2tncm91bmQgZmlsdGVycywgdGhlIHBpeGVscyBhcmUgcmVhZCBmcm9tIHRoZSBmaWx0ZXIncyB0
YXJnZXQKKyAgICAgICAgc3VyZmFjZSwgc28gd2UgcmVtb3ZlIG9jY2x1c2lvbiBmcm9tIHRoYXQg
dGFyZ2V0IHN1cmZhY2UgZnJvbSBwaXhlbHMKKyAgICAgICAgdGhhdCB3aWxsIGJsdXIgaW50byB2
aXNpYmxlIHBpeGVscy4KKworICAgICAgICBVbml0IHRlc3Q6IENDT2NjbHVzaW9uVHJhY2tlclRl
c3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXIKKyAgICAgICAgICAg
ICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0VHdvQmFja2dyb3VuZEZpbHRlcnNSZWR1Y2VP
Y2NsdXNpb25Ud2ljZQorICAgICAgICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3RE
b250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXJXaXRoQ2xpcAorICAgICAg
ICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250UmVkdWNlT2NjbHVzaW9uQmVs
b3dCYWNrZ3JvdW5kRmlsdGVyCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVkdWNlT2Nj
bHVzaW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVkdWNlT2Nj
bHVzaW9uQmVsb3dTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6bGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UpOgorCiAyMDEyLTA0LTMwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgTW92ZSBtb3JlIG9mIGNvbW1pdHRpbmcgYW5kIHN0YXJ0aW5nIHRv
IHdyaXRlIGEgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTA5NzI2MDAw
NjU4MjdmZTUyM2JmY2Y2MTQxNDYxZmM1YTZjNGY5Ny4uZjMwZTA1ZGYzN2Q0YjgzNDE4MGVjOTgw
ZjMwZTg0YzFiMmFlZWRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MiBAQAorMjAxMi0wNS0wMSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0
IGFyZSBuZWVkZWQgZm9yIGEgYmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDT2NjbHVzaW9uVHJhY2tl
clRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RT
dXJmYWNlQ2hpbGRPZkNsaXBwaW5nU3VyZmFjZTo6cnVuTXlUZXN0KToKKyAgICAgICAgKFdlYktp
dFRlc3RzKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVs
c05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2Nj
bHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0
ZXI6OnJ1bk15VGVzdCk6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0VHdvQmFja2dy
b3VuZEZpbHRlcnNSZWR1Y2VPY2NsdXNpb25Ud2ljZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6
Q0NPY2NsdXNpb25UcmFja2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9u
VHdpY2U6OnJ1bk15VGVzdCk6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9j
Y2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyV2l0aENsaXApOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRl
ZEZvckJhY2tncm91bmRGaWx0ZXJXaXRoQ2xpcDo6cnVuTXlUZXN0KToKKyAgICAgICAgKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3REb250UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVy
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVj
ZU9jY2x1c2lvbkJlbG93QmFja2dyb3VuZEZpbHRlcjo6cnVuTXlUZXN0KToKKwogMjAxMi0wNC0z
MCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBSZW1vdmUgUGxhdGZvcm1TdXBwb3J0Ojpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlLCBj
YWxsIGxvYWRSZXNvdXJjZSBkaXJlY3RseQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgKaW5kZXggMmI1OTQwYzk0MjA2NWYxOGQw
NzJmMjlkOWE4ZmM3OTdlYzI0NTZiOC4uN2NiN2UzZmJiYWMxN2JmODAzMjUyOGI3YTBkNDQwNzhh
OGZjMDIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJG
aWx0ZXJPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YkZpbHRlck9wZXJhdGlvbi5oCkBAIC03NSw3ICs3NSw4IEBAIHN0cnVjdCBXZWJCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIFdlYkZpbHRlck9wZXJhdGlvbiB7
CiAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJUeXBlSW52ZXJ0ID0gNSwKICAg
ICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlclR5cGVCcmlnaHRuZXNzID0gNywKICAg
ICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlclR5cGVDb250cmFzdCA9IDgKLSAgICAg
ICAgLy8gT3BhY2l0eSBpcyBtaXNzaW5nIGJlY2F1c2UgdGhpcyBpcyBtb3JlIGV4cGVuc2l2ZSB0
aGFuIGp1c3Qgc2V0dGluZyBvcGFjaXR5IG9uIHRoZSBsYXllci4KKyAgICAgICAgLy8gT3BhY2l0
eSBpcyBtaXNzaW5nIGJlY2F1c2UgdGhpcyBpcyBtb3JlIGV4cGVuc2l2ZSB0aGFuIGp1c3Qgc2V0
dGluZyBvcGFjaXR5IG9uIHRoZSBsYXllciwKKyAgICAgICAgLy8gYW5kIG9wYWNpdHkgaXMgbm90
IGFsbG93ZWQgZm9yIGJhY2tncm91bmQgZmlsdGVycy4KICAgICB9OwogCiAgICAgV2ViQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbihCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyVHlwZSB0eXBlLCBmbG9hdCBhbW91bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmNwcAppbmRleCA0NGE2OGJhNTIxNDA5MjA5MmJjNjBmYWU0MDRkYWNiOTNmOWQ5MjkyLi4w
YTNjMmVkZjI4YzE4MTA4MmI1MjcyNzhiMGU2ZTc5OWUyNTgwMzUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKQEAgLTE1Niw2ICsxNTYsNjEgQEAgc3RhdGljIGlubGlu
ZSBSZWdpb24gdHJhbnNmb3JtU3VyZmFjZU9wYXF1ZVJlZ2lvbihjb25zdCBSZW5kZXJTdXJmYWNl
VHlwZSogc3VyZmEKICAgICByZXR1cm4gdHJhbnNmb3JtZWRSZWdpb247CiB9CiAKK3N0YXRpYyBp
bmxpbmUgdm9pZCByZWR1Y2VPY2NsdXNpb24oY29uc3QgSW50UmVjdCYgYWZmZWN0ZWRBcmVhLCBj
b25zdCBJbnRSZWN0JiBleHBhbmRlZFBpeGVsLCBSZWdpb24mIG9jY2x1c2lvbikKK3sKKyAgICBp
ZiAoYWZmZWN0ZWRBcmVhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVnaW9u
IGFmZmVjdGVkT2NjbHVzaW9uID0gaW50ZXJzZWN0KG9jY2x1c2lvbiwgYWZmZWN0ZWRBcmVhKTsK
KyAgICBWZWN0b3I8SW50UmVjdD4gYWZmZWN0ZWRPY2NsdXNpb25SZWN0cyA9IGFmZmVjdGVkT2Nj
bHVzaW9uLnJlY3RzKCk7CisKKyAgICBvY2NsdXNpb24uc3VidHJhY3QoYWZmZWN0ZWRBcmVhKTsK
KyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGFmZmVjdGVkT2NjbHVzaW9uUmVjdHMuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgSW50UmVjdCYgb2NjbHVzaW9uUmVjdCA9IGFmZmVjdGVkT2NjbHVz
aW9uUmVjdHNbal07CisKKyAgICAgICAgLy8gU2hyaW5rIHRoZSByZWN0IGJ5IGV4cGFuZGluZyB0
aGUgbm9uLW9wYXF1ZSBwaXhlbHMgb3V0c2lkZSB0aGUgcmVjdC4KKyAgICAgICAgLy8gVG8gY29u
dmVydCB0aGUgZXhwYW5kZWRQaXhlbCBJbnRSZWN0IHRvIG91dHNldHM6CisgICAgICAgIC8vIHgg
PSAtbGVmdE91dHNldAorICAgICAgICAvLyB3aWR0aCA9IGxlZnRPdXRzZXQgKyByaWdodE91dHNl
dAorICAgICAgICAvLyBtYXhYID0geCArIHdpZHRoID0gLWxlZnRPdXRzZXQgKyBsZWZ0T3V0c2V0
ICsgcmlnaHRPdXRzZXQgPSByaWdodE91dHNldAorCisgICAgICAgIC8vIFRoZSBsZWZ0T3V0c2V0
IG9mIHRoZSBmaWx0ZXJzIG1vdmVzIHBpeGVscyBvbiB0aGUgcmlnaHQgc2lkZSBvZgorICAgICAg
ICAvLyB0aGUgb2NjbHVzaW9uUmVjdCBpbnRvIGl0LCBzaHJpbmtpbmcgaXRzIHJpZ2h0IGVkZ2Uu
CisgICAgICAgIGludCBzaHJpbmtMZWZ0ID0gb2NjbHVzaW9uUmVjdC54KCkgPT0gYWZmZWN0ZWRB
cmVhLngoKSA/IDAgOiBleHBhbmRlZFBpeGVsLm1heFgoKTsKKyAgICAgICAgaW50IHNocmlua1Rv
cCA9IG9jY2x1c2lvblJlY3QueSgpID09IGFmZmVjdGVkQXJlYS55KCkgPyAwIDogZXhwYW5kZWRQ
aXhlbC5tYXhZKCk7CisgICAgICAgIGludCBzaHJpbmtSaWdodCA9IG9jY2x1c2lvblJlY3QubWF4
WCgpID09IGFmZmVjdGVkQXJlYS5tYXhYKCkgPyAwIDogLWV4cGFuZGVkUGl4ZWwueCgpOworICAg
ICAgICBpbnQgc2hyaW5rQm90dG9tID0gb2NjbHVzaW9uUmVjdC5tYXhZKCkgPT0gYWZmZWN0ZWRB
cmVhLm1heFkoKSA/IDAgOiAtZXhwYW5kZWRQaXhlbC55KCk7CisKKyAgICAgICAgb2NjbHVzaW9u
UmVjdC5tb3ZlKHNocmlua0xlZnQsIHNocmlua1RvcCk7CisgICAgICAgIG9jY2x1c2lvblJlY3Qu
Y29udHJhY3Qoc2hyaW5rTGVmdCArIHNocmlua1JpZ2h0LCBzaHJpbmtUb3AgKyBzaHJpbmtCb3R0
b20pOworCisgICAgICAgIG9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25SZWN0KTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorc3RhdGljIHZvaWQgcmVk
dWNlT2NjbHVzaW9uQmVsb3dTdXJmYWNlKFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VyZmFjZVRyYW5zZm9ybSwgUmVuZGVyU3VyZmFjZVR5
cGUqIHN1cmZhY2VUYXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5UYXJnZXQsIFJlZ2lvbiYgb2Nj
bHVzaW9uSW5TY3JlZW4pCit7CisgICAgSW50UmVjdCBib3VuZHNJblRhcmdldCA9IGVuY2xvc2lu
Z0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3Qoc3VyZmFjZVRyYW5zZm9ybSwgRmxv
YXRSZWN0KHN1cmZhY2UtPmNvbnRlbnRSZWN0KCkpKSk7CisgICAgaWYgKCFzdXJmYWNlLT5jbGlw
UmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgYm91bmRzSW5UYXJnZXQuaW50ZXJzZWN0KHN1cmZh
Y2UtPmNsaXBSZWN0KCkpOworCisgICAgaW50IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNl
dEJvdHRvbSwgb3V0c2V0TGVmdDsKKyAgICBzdXJmYWNlLT5iYWNrZ3JvdW5kRmlsdGVycygpLmdl
dE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0
KTsKKworICAgIC8vIFRoZSBmaWx0ZXIgY2FuIG1vdmUgcGl4ZWxzIGZyb20gb3V0c2lkZSBvZiB0
aGUgY2xpcCwgc28gYWxsb3cgYWZmZWN0ZWRBcmVhIHRvIGV4cGFuZCBvdXRzaWRlIHRoZSBjbGlw
LgorICAgIGJvdW5kc0luVGFyZ2V0Lm1vdmUoLW91dHNldExlZnQsIC1vdXRzZXRUb3ApOworICAg
IGJvdW5kc0luVGFyZ2V0LmV4cGFuZChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIG91dHNldFRv
cCArIG91dHNldEJvdHRvbSk7CisKKyAgICBJbnRSZWN0IGJvdW5kc0luU2NyZWVuID0gZW5jbG9z
aW5nSW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChzdXJmYWNlVGFyZ2V0LT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpLCBGbG9hdFJlY3QoYm91bmRzSW5UYXJnZXQpKSk7CisKKyAgICBJ
bnRSZWN0IGZpbHRlck91dHNldHNJblRhcmdldCgtb3V0c2V0TGVmdCwgLW91dHNldFRvcCwgb3V0
c2V0TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgIElu
dFJlY3QgZmlsdGVyT3V0c2V0c0luU2NyZWVuID0gZW5jbG9zaW5nSW50UmVjdChDQ01hdGhVdGls
OjptYXBDbGlwcGVkUmVjdChzdXJmYWNlVGFyZ2V0LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBG
bG9hdFJlY3QoZmlsdGVyT3V0c2V0c0luVGFyZ2V0KSkpOworCisgICAgcmVkdWNlT2NjbHVzaW9u
KGJvdW5kc0luVGFyZ2V0LCBmaWx0ZXJPdXRzZXRzSW5UYXJnZXQsIG9jY2x1c2lvbkluVGFyZ2V0
KTsKKyAgICByZWR1Y2VPY2NsdXNpb24oYm91bmRzSW5TY3JlZW4sIGZpbHRlck91dHNldHNJblNj
cmVlbiwgb2NjbHVzaW9uSW5TY3JlZW4pOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFyZ2V0KQogewpAQCAtMTcyLDcgKzIy
Nyw2IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPjo6bGVhdmVUb1RhcmdldFJlbmRlclN1CiAKICAgICBpZiAoc3VyZmFjZVdpbGxCZUF0
VG9wQWZ0ZXJQb3ApIHsKICAgICAgICAgLy8gTWVyZ2UgdGhlIHRvcCBvZiB0aGUgc3RhY2sgZG93
bi4KLQogICAgICAgICBtX3N0YWNrW2xhc3RJbmRleCAtIDFdLm9jY2x1c2lvbkluU2NyZWVuLnVu
aXRlKG1fc3RhY2tbbGFzdEluZGV4XS5vY2NsdXNpb25JblNjcmVlbik7CiAgICAgICAgIG1fc3Rh
Y2tbbGFzdEluZGV4IC0gMV0ub2NjbHVzaW9uSW5UYXJnZXQudW5pdGUob2xkVGFyZ2V0T2NjbHVz
aW9uSW5OZXdUYXJnZXQpOwogICAgICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKQEAgLTE4MSw2
ICsyMzUsMTIgQEAgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVy
U3VyZmFjZVR5cGU+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3UKICAgICAgICAgbV9zdGFjay5sYXN0
KCkuc3VyZmFjZSA9IG5ld1RhcmdldDsKICAgICAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9u
SW5UYXJnZXQgPSBvbGRUYXJnZXRPY2NsdXNpb25Jbk5ld1RhcmdldDsKICAgICB9CisKKyAgICBp
ZiAob2xkVGFyZ2V0LT5iYWNrZ3JvdW5kRmlsdGVycygpLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpKSB7CisgICAgICAgIHJlZHVjZU9jY2x1c2lvbkJlbG93U3VyZmFjZShvbGRUYXJnZXQsIG9s
ZFRhcmdldC0+b3JpZ2luVHJhbnNmb3JtKCksIG5ld1RhcmdldCwgbV9zdGFjay5sYXN0KCkub2Nj
bHVzaW9uSW5UYXJnZXQsIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuKTsKKyAgICAg
ICAgaWYgKG9sZFRhcmdldC0+aGFzUmVwbGljYSgpKQorICAgICAgICAgICAgcmVkdWNlT2NjbHVz
aW9uQmVsb3dTdXJmYWNlKG9sZFRhcmdldCwgb2xkVGFyZ2V0LT5yZXBsaWNhT3JpZ2luVHJhbnNm
b3JtKCksIG5ld1RhcmdldCwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQsIG1fc3Rh
Y2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIExheWVyVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IDQxZmI1YTUxZjU0ZTZlNTJmNTJlZjFl
MWQyYjlkNzY5NjJiZTAxYmUuLjA1MzMxMzQ3NjlmMmIzNDdmYmIwYjNlNzQ1ZGEzMDk0OWUyMmM0
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25U
cmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1
c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMjM4Nyw4ICsyMzg3LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEw
MDApKTsKIAogICAgICAgICAvLyB8dG9wbW9zdHwgb2NjbHVkZXMgZXZlcnl0aGluZyBwYXJ0aWFs
bHkgc28gd2Uga25vdyBvY2NsdXNpb24gaXMgaGFwcGVuaW5nIGF0IGFsbC4KLSAgICAgICAgdGhp
cy0+ZW50ZXJMYXllcih0b3Btb3N0LCBvY2NsdXNpb24pOwotICAgICAgICB0aGlzLT5sZWF2ZUxh
eWVyKHRvcG1vc3QsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIodG9wbW9z
dCwgb2NjbHVzaW9uKTsKIAogICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDgw
LCA1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwogICAg
ICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOwpAQCAtMjQyMSw0ICsyNDIwLDM2OCBAQCBwcm90ZWN0ZWQ6CiAKIEFMTF9D
Q09DQ0xVU0lPTlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0U3VyZmFjZUNoaWxk
T2ZDbGlwcGluZ1N1cmZhY2UpOwogCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVM
YXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVk
ZWRGb3JCYWNrZ3JvdW5kRmlsdGVyIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlw
ZXMsIG9wYXF1ZUxheWVycz4geworcHJvdGVjdGVkOgorICAgIHZvaWQgcnVuTXlUZXN0KCkKKyAg
ICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOworICAgICAgICBz
Y2FsZUJ5SGFsZi5zY2FsZSgwLjUpOworCisgICAgICAgIC8vIE1ha2UgYSBzdXJmYWNlIGFuZCBp
dHMgcmVwbGljYSwgZWFjaCA1MHg1MCwgdGhhdCBhcmUgY29tcGxldGVseSBzdXJyb3VuZGVkIGJ5
IG9wYXF1ZSBsYXllcnMgd2hpY2ggYXJlIGFib3ZlIHRoZW0gaW4gdGhlIHotb3JkZXIuCisgICAg
ICAgIC8vIFRoZSBzdXJmYWNlIGlzIHNjYWxlZCB0byB0ZXN0IHRoYXQgdGhlIHBpeGVsIG1vdmlu
ZyBpcyBkb25lIGluIHRoZSB0YXJnZXQgc3BhY2UsIHdoZXJlIHRoZSBiYWNrZ3JvdW5kIGZpbHRl
ciBpcyBhcHBsaWVkLCBidXQgdGhlIHN1cmZhY2UKKyAgICAgICAgLy8gYXBwZWFycyBhdCA1MCwg
NTAgYW5kIHRoZSByZXBsaWNhIGF0IDIwMCwgNTAuCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpD
b250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMTUwKSk7CisgICAgICAgIHR5
cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZSA9IHRoaXMtPmNyZWF0ZURy
YXdpbmdMYXllcihwYXJlbnQsIHNjYWxlQnlIYWxmLCBGbG9hdFBvaW50KDUwLCA1MCksIEludFNp
emUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgICAgIHRoaXMtPmNyZWF0ZVJlcGxpY2FMYXllcihm
aWx0ZXJlZFN1cmZhY2UsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDMwMCwgMCks
IEludFNpemUoKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGlu
Z0xheWVyMSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgNTApLCB0cnVlKTsKKyAgICAg
ICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXIyID0gdGhpcy0+Y3Jl
YXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMTAwKSwgSW50U2l6ZSgzMDAsIDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMyA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihw
YXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDUwKSwgSW50U2l6ZSg1
MCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVk
aW5nTGF5ZXI0ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMTAwLCA1MCksIEludFNpemUoMTAwLCA1MCksIHRydWUpOwor
ICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjUgPSB0aGlz
LT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgyNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsKKworICAgICAgICAvLyBGaWx0
ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlv
bnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMTAsIFdlYkNvcmU6OkZpeGVkKSwgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSKSk7CisgICAgICAgIGZpbHRlcmVkU3VyZmFjZS0+c2V0QmFja2dyb3VuZEZp
bHRlcnMoZmlsdGVycyk7CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgZGlzdGFuY2Ugb2YgaW5mbHVl
bmNlIGZvciB0aGUgYmx1ciBlZmZlY3QuCisgICAgICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJp
Z2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQ7CisgICAgICAgIGZpbHRlcnMuZ2V0T3V0c2V0
cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQpOworCisg
ICAgICAgIHRoaXMtPmNhbGNEcmF3RXRjKHBhcmVudCk7CisKKyAgICAgICAgVGVzdENDT2NjbHVz
aW9uVHJhY2tlcldpdGhTY2lzc29yPHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUsIHR5cGVuYW1l
IFR5cGVzOjpSZW5kZXJTdXJmYWNlVHlwZT4gb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwg
MTAwMCkpOworICAgICAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAs
IDAsIDEwMDAsIDEwMDApKTsKKworICAgICAgICAvLyBUaGVzZSBsYXllcnMgb2NjbHVkZSBwaXhl
bHMgZGlyZWN0bHkgYmVzaWRlIHRoZSBmaWx0ZXJlZFN1cmZhY2UuIEJlY2F1c2UgZmlsdGVyZWQg
c3VyZmFjZSBibGVuZHMgcGl4ZWxzIGluIGEgcmFkaXVzLCBpdCB3aWxsCisgICAgICAgIC8vIG5l
ZWQgdG8gc2VlIHNvbWUgb2YgdGhlIHBpeGVscyAodXAgdG8gcmFkaXVzIGZhcikgdW5kZXJuZWF0
aCB0aGUgb2NjbHVkaW5nTGF5ZXJzLgorICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGlu
Z0xheWVyNSwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdM
YXllcjQsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5
ZXIzLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVy
Miwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjEs
IG9jY2x1c2lvbik7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAs
IDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDMwMCwg
MTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCku
cmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIEV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGUgc3Vy
ZmFjZS9yZXBsaWNhIGlzIG9jY2x1ZGVkIGJ1dCB0aGUgc3VyZmFjZS9yZXBsaWNhIGl0c2VsZiBp
cyBub3QuCisgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNp
b24pOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEsIDAsIDk5LCAxMDApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgxLCAw
LCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAxLCAxMDAs
IDk5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIElu
dFJlY3QoMCwgMSwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MCwgMCwgOTksIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRT
dXJmYWNlLCBJbnRSZWN0KC0xLCAwLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgwLCAwLCAxMDAsIDk5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgLTEsIDEwMCwgMTAwKSkpOworCisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAwICsgMSwgMCwgOTksIDEwMCksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDMwMCArIDEsIDAs
IDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwMCArIDAsIDEs
IDEwMCwgOTkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFj
ZSwgSW50UmVjdCgzMDAgKyAwLCAxLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMDAgKyAwLCAwLCA5OSwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMzAwIC0gMSwgMCwgMTAwLCAxMDApKSk7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAwICsgMCwgMCwgMTAwLCA5OSksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDMw
MCArIDAsIC0xLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgdGhpcy0+bGVhdmVMYXllcihmaWx0ZXJl
ZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgLy8gVGhlIGZpbHRlcmVkIGxheWVyL3Jl
cGxpY2EgZG9lcyBub3Qgb2NjbHVkZS4KKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgw
LCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRz
KCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNw
YWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAs
IDAsIDAsIDApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZh
Y2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gVGhlIHN1cmZhY2UgaGFzIGEgYmFj
a2dyb3VuZCBibHVyLCBzbyBpdCBuZWVkcyBwaXhlbHMgdGhhdCBhcmUgY3VycmVudGx5IGNvbnNp
ZGVyZWQgb2NjbHVkZWQgaW4gb3JkZXIgdG8gYmUgZHJhd24uIFNvIHRoZSBwaXhlbHMKKyAgICAg
ICAgLy8gaXQgbmVlZHMgc2hvdWxkIGJlIHJlbW92ZWQgc29tZSB0aGUgb2NjbHVkZWQgYXJlYSBz
byB0aGF0IHdoZW4gd2UgZ2V0IHRvIHRoZSBwYXJlbnQgdGhleSBhcmUgZHJhd24uCisgICAgICAg
IHRoaXMtPnZpc2l0Q29udHJpYnV0aW5nU3VyZmFjZShmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lv
bik7CisKKyAgICAgICAgdGhpcy0+ZW50ZXJMYXllcihwYXJlbnQsIG9jY2x1c2lvbik7CisgICAg
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwg
b2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKwor
ICAgICAgICBJbnRSZWN0IG91dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgdGVzdFJlY3Q7CisK
KyAgICAgICAgLy8gTm90aGluZyBpbiB0aGUgYmx1ciBvdXRzZXRzIGZvciB0aGUgZmlsdGVyZWRT
dXJmYWNlIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRSZWN0ID0gSW50UmVjdCg1MCAtIG91
dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwg
NTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNl
dFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIFN0dWZm
IG91dHNpZGUgdGhlIGJsdXIgb3V0c2V0cyBpcyBzdGlsbCBvY2NsdWRlZCB0aG91Z2guCisgICAg
ICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDAp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRz
ZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRl
c3RSZWN0Lm1vdmUoLTEsIDApOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAg
ICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7
CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwgLTEpOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQo
MCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIE5vdGhp
bmcgaW4gdGhlIGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRlcmVkU3VyZmFjZSdzIHJlcGxpY2Eg
aXMgb2NjbHVkZWQuCisgICAgICAgIG91dHNldFJlY3QgPSBJbnRSZWN0KDIwMCAtIG91dHNldExl
ZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNldExlZnQgKyBvdXRzZXRSaWdodCwgNTAgKyBv
dXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIFN0dWZmIG91dHNp
ZGUgdGhlIGJsdXIgb3V0c2V0cyBpcyBzdGlsbCBvY2NsdWRlZCB0aG91Z2guCisgICAgICAgIHRl
c3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAg
ICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0
OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0
UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0
Lm1vdmUoLTEsIDApOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAg
ICAgIHRlc3RSZWN0Lm1vdmUoMCwgLTEpOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgIH0KK307CisKK0FMTF9DQ09DQ0xV
U0lPTlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNO
ZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyKTsKKwordGVtcGxhdGU8Y2xhc3MgVHlwZXMsIGJvb2wg
b3BhcXVlTGF5ZXJzPgorY2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyVGVzdFR3b0JhY2tncm91bmRG
aWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVz
dDxUeXBlcywgb3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3Qo
KQorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVCeUhhbGY7CisgICAg
ICAgIHNjYWxlQnlIYWxmLnNjYWxlKDAuNSk7CisKKyAgICAgICAgLy8gTWFrZXMgdHdvIHN1cmZh
Y2VzIHRoYXQgY29tcGxldGVseSBjb3ZlciB8cGFyZW50fC4gVGhlIG9jY2x1c2lvbiBib3RoIGFi
b3ZlIGFuZCBiZWxvdyB0aGUgZmlsdGVycyB3aWxsIGJlIHJlZHVjZWQgYnkgZWFjaCBvZiB0aGVt
LgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExheWVyVHlwZSogcm9vdCA9IHRoaXMt
PmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoNzUsIDc1KSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIHBhcmVudCA9
IHRoaXMtPmNyZWF0ZVN1cmZhY2Uocm9vdCwgc2NhbGVCeUhhbGYsIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoMTUwLCAxNTApKTsKKyAgICAgICAgcGFyZW50LT5zZXRNYXNrc1RvQm91bmRzKHRy
dWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBmaWx0ZXJlZFN1cmZhY2Ux
ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgc2NhbGVCeUhhbGYsIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgICAgIHR5cGVuYW1lIFR5
cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZTIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5
ZXIocGFyZW50LCBzY2FsZUJ5SGFsZiwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMw
MCksIGZhbHNlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5n
TGF5ZXJBYm92ZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDEwMCwgMTAwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsK
KworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVycyBvd24gc3VyZmFjZXMuCisgICAg
ICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25z
KCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMywgV2ViQ29yZTo6
Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICAgICAgZmlsdGVyZWRTdXJmYWNl
MS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisgICAgICAgIGZpbHRlcmVkU3VyZmFj
ZTItPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgICAgIC8vIFNhdmUgdGhl
IGRpc3RhbmNlIG9mIGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZmZWN0LgorICAgICAgICBpbnQg
b3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgICAg
ICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9t
LCBvdXRzZXRMZWZ0KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0Yyhyb290KTsKKworICAg
ICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNzb3I8dHlwZW5hbWUgVHlwZXM6Okxh
eWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZhY2VUeXBlPiBvY2NsdXNpb24oSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNz
b3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAgICAgIHRoaXMtPnZpc2l0
TGF5ZXIob2NjbHVkaW5nTGF5ZXJBYm92ZSwgb2NjbHVzaW9uKTsKKyAgICAgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgxMDAgLyAyLCAxMDAgLyAyLCA1MCAvIDIsIDUwIC8gMiksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOwor
ICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMTAwLCA1MCwgNTApLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUo
KSk7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihmaWx0ZXJlZFN1cmZhY2UyLCBvY2NsdXNp
b24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJm
YWNlMiwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihmaWx0ZXJlZFN1cmZh
Y2UxLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGluZ1N1cmZhY2Uo
ZmlsdGVyZWRTdXJmYWNlMSwgb2NjbHVzaW9uKTsKKworICAgICAgICBBU1NFUlRfRVEoMXUsIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAg
ICBBU1NFUlRfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0
cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gVGVzdCBleHBlY3RhdGlvbnMgaW4gdGhlIHRhcmdl
dC4KKyAgICAgICAgSW50UmVjdCBleHBlY3RlZE9jY2x1c2lvbiA9IEludFJlY3QoMTAwICsgb3V0
c2V0UmlnaHQgKiAyLCAxMDAgKyBvdXRzZXRCb3R0b20gKiAyLCA1MCAtIChvdXRzZXRMZWZ0ICsg
b3V0c2V0UmlnaHQpICogMiwgNTAgLSAob3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKSAqIDIpOwor
ICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9jY2x1c2lvbiwgb2NjbHVzaW9uLm9jY2x1
c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKClbMF0pOworCisgICAgICAgIC8vIFRlc3QgZXhw
ZWN0YXRpb25zIGluIHRoZSBzY3JlZW4uIFRha2UgdGhlIGNlaWxpbmcgb2YgaGFsZiBvZiB0aGUg
b3V0c2V0cy4KKyAgICAgICAgb3V0c2V0VG9wID0gKG91dHNldFRvcCArIDEpIC8gMjsKKyAgICAg
ICAgb3V0c2V0UmlnaHQgPSAob3V0c2V0UmlnaHQgKyAxKSAvIDI7CisgICAgICAgIG91dHNldEJv
dHRvbSA9IChvdXRzZXRCb3R0b20gKyAxKSAvIDI7CisgICAgICAgIG91dHNldExlZnQgPSAob3V0
c2V0TGVmdCArIDEpIC8gMjsKKyAgICAgICAgZXhwZWN0ZWRPY2NsdXNpb24gPSBJbnRSZWN0KDEw
MCAvIDIgKyBvdXRzZXRSaWdodCAqIDIsIDEwMCAvIDIgKyBvdXRzZXRCb3R0b20gKiAyLCA1MCAv
IDIgLSAob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0KSAqIDIsIDUwIC8yIC0gKG91dHNldFRvcCAr
IG91dHNldEJvdHRvbSkgKiAyKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9j
Y2x1c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpWzBdKTsK
KyAgICB9Cit9OworCitBTExfQ0NPQ0NMVVNJT05UUkFDS0VSX1RFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UpOworCit0ZW1w
bGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRy
YWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyV2l0aENs
aXAgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBlcywgb3BhcXVlTGF5ZXJzPiB7
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gTWFr
ZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUweDUwLCB0aGF0IGFyZSBjb21wbGV0
ZWx5IHN1cnJvdW5kZWQgYnkgb3BhcXVlIGxheWVycyB3aGljaCBhcmUgYWJvdmUgdGhlbSBpbiB0
aGUgei1vcmRlci4KKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkNvbnRlbnRMYXllclR5cGUqIHBh
cmVudCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMzAwLCAxNTApKTsKKyAgICAgICAgLy8gV2Ugc3RpY2sgdGhlIGZpbHRl
cmVkIHN1cmZhY2UgaW5zaWRlIGEgY2xpcHBpbmcgc3VyZmFjZSBzbyB0aGF0IHdlIGNhbiBtYWtl
IHN1cmUgdGhlIGNsaXAgaXMgaG9ub3JlZCB3aGVuIGV4cG9zaW5nIHBpeGVscyBmb3IKKyAgICAg
ICAgLy8gdGhlIGJhY2tncm91bmQgZmlsdGVyLgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5
ZXJUeXBlKiBjbGlwcGluZ1N1cmZhY2UgPSB0aGlzLT5jcmVhdGVTdXJmYWNlKHBhcmVudCwgdGhp
cy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCA3MCkpOwor
ICAgICAgICBjbGlwcGluZ1N1cmZhY2UtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAg
IHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZSA9IHRoaXMtPmNyZWF0
ZURyYXdpbmdMYXllcihjbGlwcGluZ1N1cmZhY2UsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDUwLCA1MCksIEludFNpemUoNTAsIDUwKSwgZmFsc2UpOworICAgICAgICB0aGlzLT5j
cmVhdGVSZXBsaWNhTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCB0aGlzLT5pZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgxNTAsIDApLCBJbnRTaXplKCkpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6
TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjEgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFy
ZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAs
IDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGlu
Z0xheWVyMiA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDEwMCksIEludFNpemUoMzAwLCA1MCksIHRydWUpOworICAg
ICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjMgPSB0aGlzLT5j
cmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCA1MCksIEludFNpemUoNTAsIDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyNCA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihw
YXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDEwMCwgNTApLCBJbnRTaXpl
KDEwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2Nj
bHVkaW5nTGF5ZXI1ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMjUwLCA1MCksIEludFNpemUoNTAsIDUwKSwgdHJ1ZSk7
CisKKyAgICAgICAgLy8gRmlsdGVycyBtYWtlIHRoZSBsYXllciBvd24gYSBzdXJmYWNlLiBUaGlz
IGZpbHRlciBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBnb2VzIG91dHNpZGUgdGhlIGJvdHRvbSBv
ZiB0aGUgY2xpcHBpbmdTdXJmYWNlLgorICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7
CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVyT3BlcmF0aW9u
OjpjcmVhdGUoTGVuZ3RoKDEyLCBXZWJDb3JlOjpGaXhlZCksIEZpbHRlck9wZXJhdGlvbjo6QkxV
UikpOworICAgICAgICBmaWx0ZXJlZFN1cmZhY2UtPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRl
cnMpOworCisgICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9mIGluZmx1ZW5jZSBmb3IgdGhl
IGJsdXIgZWZmZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0
Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9w
LCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKKworICAgICAgICB0aGlz
LT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXJX
aXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0eXBlbmFtZSBUeXBlczo6UmVu
ZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAg
ICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAx
MDAwKSk7CisKKyAgICAgICAgLy8gVGhlc2UgbGF5ZXJzIG9jY2x1ZGUgcGl4ZWxzIGRpcmVjdGx5
IGJlc2lkZSB0aGUgZmlsdGVyZWRTdXJmYWNlLiBCZWNhdXNlIGZpbHRlcmVkIHN1cmZhY2UgYmxl
bmRzIHBpeGVscyBpbiBhIHJhZGl1cywgaXQgd2lsbAorICAgICAgICAvLyBuZWVkIHRvIHNlZSBz
b21lIG9mIHRoZSBwaXhlbHMgKHVwIHRvIHJhZGl1cyBmYXIpIHVuZGVybmVhdGggdGhlIG9jY2x1
ZGluZ0xheWVycy4KKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjUsIG9j
Y2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXI0LCBvY2Ns
dXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyMywgb2NjbHVz
aW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjIsIG9jY2x1c2lv
bik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXIxLCBvY2NsdXNpb24p
OworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1
c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVD
VF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKworICAgICAgICAvLyBFdmVyeXRoaW5nIG91dHNpZGUgdGhlIHN1cmZhY2UvcmVwbGlj
YSBpcyBvY2NsdWRlZCBidXQgdGhlIHN1cmZhY2UvcmVwbGljYSBpdHNlbGYgaXMgbm90LgorICAg
ICAgICB0aGlzLT5lbnRlckxheWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxLCAwLCA0OSwgNTApLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgxLCAwLCA1MCwgNTApKSk7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMSwgNTAsIDQ5KSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgMSwgNTAs
IDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDQ5LCA1MCksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KC0x
LCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgNTAs
IDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIElu
dFJlY3QoMCwgLTEsIDUwLCA1MCkpKTsKKworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDE1MCArIDEsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmls
dGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDEsIDAsIDUwLCA1MCkpKTsKKyAgICAgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgxNTAgKyAwLCAxLCA1MCwgNDkpLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgxNTAgKyAwLCAxLCA1MCwg
NTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTUwICsgMCwgMCwgNDksIDUw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJl
Y3QoMTUwIC0gMSwgMCwgNTAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDE1MCArIDAsIDAsIDUwLCA0OSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmls
dGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDAsIC0xLCA1MCwgNTApKSk7CisgICAgICAgIHRo
aXMtPmxlYXZlTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIC8v
IFRoZSBmaWx0ZXJlZCBsYXllci9yZXBsaWNhIGRvZXMgbm90IG9jY2x1ZGUuCisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFy
Z2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBvY2NsdXNpb24u
b2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8v
IFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwgc28gaXQgbmVlZHMgcGl4ZWxzIHRo
YXQgYXJlIGN1cnJlbnRseSBjb25zaWRlcmVkIG9jY2x1ZGVkIGluIG9yZGVyIHRvIGJlIGRyYXdu
LiBTbyB0aGUgcGl4ZWxzCisgICAgICAgIC8vIGl0IG5lZWRzIHNob3VsZCBiZSByZW1vdmVkIHNv
bWUgdGhlIG9jY2x1ZGVkIGFyZWEgc28gdGhhdCB3aGVuIHdlIGdldCB0byB0aGUgcGFyZW50IHRo
ZXkgYXJlIGRyYXduLgorICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGluZ1N1cmZhY2UoZmls
dGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIHRoaXMtPmVudGVyQ29udHJpYnV0
aW5nU3VyZmFjZShjbGlwcGluZ1N1cmZhY2UsIG9jY2x1c2lvbik7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3Jl
ZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2Nj
bHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICBJbnRSZWN0
IG91dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgY2xpcHBlZE91dHNldFJlY3Q7CisgICAgICAg
IEludFJlY3QgdGVzdFJlY3Q7CisKKyAgICAgICAgLy8gTm90aGluZyBpbiB0aGUgKGNsaXBwZWQp
IGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRlcmVkU3VyZmFjZSBpcyBvY2NsdWRlZC4KKyAgICAg
ICAgb3V0c2V0UmVjdCA9IEludFJlY3QoNTAgLSBvdXRzZXRMZWZ0LCA1MCAtIG91dHNldFRvcCwg
NTAgKyBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0c2V0VG9wICsgb3V0c2V0Qm90
dG9tKTsKKyAgICAgICAgY2xpcHBlZE91dHNldFJlY3QgPSBpbnRlcnNlY3Rpb24ob3V0c2V0UmVj
dCwgSW50UmVjdCgwIC0gb3V0c2V0TGVmdCwgMCAtIG91dHNldFRvcCwgMzAwICsgb3V0c2V0TGVm
dCArIG91dHNldFJpZ2h0LCA3MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSkpOworICAgICAg
ICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRP
dXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFj
ZSwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBTdHVmZiBvdXRzaWRlIHRoZSAoY2xpcHBlZCkg
Ymx1ciBvdXRzZXRzIGlzIHN0aWxsIG9jY2x1ZGVkIHRob3VnaC4KKyAgICAgICAgdGVzdFJlY3Qg
PSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBv
dXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRz
ZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsKKyAgICAgICAgdGVzdFJlY3Qu
ZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0
KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QubW92
ZSgwLCAtMSk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQRUNU
X0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOworCisgICAgICAgIC8vIE5vdGhpbmcgaW4g
dGhlIChjbGlwcGVkKSBibHVyIG91dHNldHMgZm9yIHRoZSBmaWx0ZXJlZFN1cmZhY2UncyByZXBs
aWNhIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRSZWN0ID0gSW50UmVjdCgyMDAgLSBvdXRz
ZXRMZWZ0LCA1MCAtIG91dHNldFRvcCwgNTAgKyBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIDUw
ICsgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICAgICAgY2xpcHBlZE91dHNldFJlY3Qg
PSBpbnRlcnNlY3Rpb24ob3V0c2V0UmVjdCwgSW50UmVjdCgwIC0gb3V0c2V0TGVmdCwgMCAtIG91
dHNldFRvcCwgMzAwICsgb3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCA3MCArIG91dHNldFRvcCAr
IG91dHNldEJvdHRvbSkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAg
IEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBTdHVm
ZiBvdXRzaWRlIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRzIGlzIHN0aWxsIG9jY2x1ZGVkIHRo
b3VnaC4KKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5l
eHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3Qp
KTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBh
bmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsK
KyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKC0x
LCAwKTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChj
bGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVj
dDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFu
ZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOwor
ICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyV2l0aENsaXAp
OworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+CitjbGFzcyBDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lvbkJlbG93QmFja2dyb3VuZEZpbHRl
ciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0PFR5cGVzLCBvcGFxdWVMYXllcnM+IHsK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIHJ1bk15VGVzdCgpCisgICAgeworICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzY2FsZUJ5SGFsZjsKKyAgICAgICAgc2NhbGVCeUhhbGYuc2NhbGUoMC41
KTsKKworICAgICAgICAvLyBNYWtlIGEgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EsIGVhY2ggNTB4
NTAsIHRoYXQgYXJlIGNvbXBsZXRlbHkgc3Vycm91bmRlZCBieSBvcGFxdWUgbGF5ZXJzIHdoaWNo
IGFyZSBhYm92ZSB0aGVtIGluIHRoZSB6LW9yZGVyLgorICAgICAgICAvLyBUaGUgc3VyZmFjZSBp
cyBzY2FsZWQgdG8gdGVzdCB0aGF0IHRoZSBwaXhlbCBtb3ZpbmcgaXMgZG9uZSBpbiB0aGUgdGFy
Z2V0IHNwYWNlLCB3aGVyZSB0aGUgYmFja2dyb3VuZCBmaWx0ZXIgaXMgYXBwbGllZCwgYnV0IHRo
ZSBzdXJmYWNlCisgICAgICAgIC8vIGFwcGVhcnMgYXQgNTAsIDUwIGFuZCB0aGUgcmVwbGljYSBh
dCAyMDAsIDUwLgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExheWVyVHlwZSogcGFy
ZW50ID0gdGhpcy0+Y3JlYXRlUm9vdCh0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgzMDAsIDE1MCkpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJU
eXBlKiBiZWhpbmRTdXJmYWNlTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50
LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCg2MCwgNjApLCBJbnRTaXplKDMwLCAz
MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZWhpbmRSZXBs
aWNhTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgyMTAsIDYwKSwgSW50U2l6ZSgzMCwgMzApLCB0cnVlKTsKKyAg
ICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogZmlsdGVyZWRTdXJmYWNlID0gdGhpcy0+
Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgc2NhbGVCeUhhbGYsIEZsb2F0UG9pbnQoNTAsIDUw
KSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICAgICAgdGhpcy0+Y3JlYXRlUmVwbGlj
YUxheWVyKGZpbHRlcmVkU3VyZmFjZSwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MzAwLCAwKSwgSW50U2l6ZSgpKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVy
IG93biBhIHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAg
ICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAg
ICAgICAgZmlsdGVyZWRTdXJmYWNlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKwor
ICAgICAgICAvLyBTYXZlIHRoZSBkaXN0YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBibHVyIGVm
ZmVjdC4KKyAgICAgICAgaW50IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwg
b3V0c2V0TGVmdDsKKyAgICAgICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0
UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisKKyAgICAgICAgdGhpcy0+Y2FsY0Ry
YXdFdGMocGFyZW50KTsKKworICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNz
b3I8dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZh
Y2VUeXBlPiBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9j
Y2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOwor
CisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwgc28gaXQgYmx1
cnMgbm9uLW9wYXF1ZSBwaXhlbHMgYmVsb3cgaXQuCisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIo
ZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1
dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIHRoaXMt
PnZpc2l0TGF5ZXIoYmVoaW5kUmVwbGljYUxheWVyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlz
LT52aXNpdExheWVyKGJlaGluZFN1cmZhY2VMYXllciwgb2NjbHVzaW9uKTsKKworICAgICAgICAv
LyBOb24tb3BhcXVlIHBpeGVscyBhcmUgYmx1cnJlZCBpbnRvIHRoZSBsYXllcnMgYmVoaW5kIHRo
ZSBmaWx0ZXJlZFN1cmZhY2UuCisgICAgICAgIEludFJlY3Qgb2NjbHVzaW9uQmVoaW5kU3VyZmFj
ZSA9IEludFJlY3QoNjAsIDYwLCAzMCwgMzApOworICAgICAgICBJbnRSZWN0IG9jY2x1c2lvbkJl
aGluZFJlcGxpY2EgPSBJbnRSZWN0KDIxMCwgNjAsIDMwLCAzMCk7CisKKyAgICAgICAgSW50UmVj
dCBleHBlY3RlZE9wYXF1ZUJvdW5kcyA9IHVuaW9uUmVjdChvY2NsdXNpb25CZWhpbmRTdXJmYWNl
LCBvY2NsdXNpb25CZWhpbmRSZXBsaWNhKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0
ZWRPcGFxdWVCb3VuZHMsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRz
KCkpOworICAgICAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNw
YWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9w
YXF1ZUJvdW5kcywgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJm
YWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNL
RVJfVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lvbkJlbG93QmFj
a2dyb3VuZEZpbHRlcik7CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139905</attachid>
            <date>2012-05-02 16:08:25 -0700</date>
            <delta_ts>2012-05-02 18:10:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84317-20120502190824.patch</filename>
            <type>text/plain</type>
            <size>60125</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4MDUwNjkzYzUzN2Zj
MTU0ZDcxMzViMGIwZjYxNzkxM2JkOGRkZTkzLi44ZWVjN2U1YWNhM2IyZDQxMjYxNDk0NjE0OGQ0
OTFjZmU1YWMzNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNS0wMiAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEg
YmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaDoKKwog
MjAxMi0wNS0wMSAgR2F2aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbQ2hyb21pdW1dIEZpeCBXZWJQcmVyZW5kZXI6OnJlZmVycmVyKCkgdGh1bmsuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggZDgyYzQzZDU0YTkxNGI3MjZiNzJiMjFkNmVhYjlkZTg2NTk1OTliNC4uNmU1YmY2NDI4
ZmE0ZGRjZGY0ZTg5NGEzYTBhOTMyZTMxNDM4MTBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4
IEBACisyMDEyLTA1LTAyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gRG9uJ3Qgb2NjbHVkZSBwaXhlbHMgaW4gYSBzdXJmYWNlIHRoYXQg
YXJlIG5lZWRlZCBmb3IgYSBiYWNrZ3JvdW5kIGZpbHRlciBibHVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDMxNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsdXIgZmlsdGVycyBtb3ZlIHBpeGVscyBh
cm91bmQsIHNvIGEgcGl4ZWwgY2FuIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgcGl4
ZWxzIGF0IHNvbWUgZGlzdGFuY2UgYXdheS4gSWYgYSBwaXhlbCBpcyBub3Qgb2NjbHVkZWQsIHRo
ZW4gYWxsCisgICAgICAgIHBpeGVscyB3aXRoaW4gdGhlIHJhZGl1cyBvZiB0aGUgYmx1ciBtYXkg
aW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiB0aGF0CisgICAgICAgIHBpeGVsLCBzbyB0aGV5IHNob3Vs
ZCBhbHNvIHN0YXkgdW5vY2NsdWRlZC4KKworICAgICAgICBGb3IgYmFja2dyb3VuZCBmaWx0ZXJz
LCB0aGUgcGl4ZWxzIGFyZSByZWFkIGZyb20gdGhlIGZpbHRlcidzIHRhcmdldAorICAgICAgICBz
dXJmYWNlLCBzbyB3ZSByZW1vdmUgb2NjbHVzaW9uIGZyb20gdGhhdCB0YXJnZXQgc3VyZmFjZSBm
cm9tIHBpeGVscworICAgICAgICB0aGF0IHdpbGwgYmx1ciBpbnRvIHZpc2libGUgcGl4ZWxzLgor
CisgICAgICAgIFVuaXQgdGVzdDogQ0NPY2NsdXNpb25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4
ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlcgorICAgICAgICAgICAgICAgICAgIENDT2NjbHVz
aW9uVHJhY2tlclRlc3RUd29CYWNrZ3JvdW5kRmlsdGVyc1JlZHVjZU9jY2x1c2lvblR3aWNlCisg
ICAgICAgICAgICAgICAgICAgQ0NPY2NsdXNpb25UcmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxz
TmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlcldpdGhDbGlwCisgICAgICAgICAgICAgICAgICAgQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdERvbnRSZWR1Y2VPY2NsdXNpb25CZWxvd0JhY2tncm91bmRGaWx0
ZXIKKyAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9j
Y2x1c2lvbklmQmFja2dyb3VuZEZpbHRlcklzT2NjbHVkZWQKKyAgICAgICAgICAgICAgICAgICBD
Q09jY2x1c2lvblRyYWNrZXJUZXN0UmVkdWNlT2NjbHVzaW9uV2hlbkJhY2tncm91bmRGaWx0ZXJJ
c1BhcnRpYWxseU9jY2x1ZGVkCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVkdWNlT2Nj
bHVzaW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVkdWNlT2Nj
bHVzaW9uQmVsb3dTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6bGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Ojp1bm9jY2x1ZGVkQ29udHJpYnV0aW5n
U3VyZmFjZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaDoKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckJh
c2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6OmFwcGVuZFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NRdWFkQ3VsbGVyOjphcHBlbmRSZXBsaWNhKToKKwogMjAxMi0w
NS0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSB0
aXRsZSBhbmQgbWVkaWEgcXVlcmllcyBmcm9tIFN0eWxlU2hlZXRJbnRlcm5hbCB0byBDU1NTdHls
ZVNoZWV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDEyNGZiMDhhNDcwZjEwZjc2NmY5
MGUxYTM4Nzg2ZjdjNGM3N2Q4MTkuLjY0MGYzNGFhZTNiYTM2MDNkZmQ4MTMxOThjODkyZjMwMmUy
NWNjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTIt
MDUtMDIgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBEb24ndCBvY2NsdWRlIHBpeGVscyBpbiBhIHN1cmZhY2UgdGhhdCBhcmUgbmVlZGVk
IGZvciBhIGJhY2tncm91bmQgZmlsdGVyIGJsdXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0T3ZlcmxhcHBpbmdT
dXJmYWNlU2libGluZ3M6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2Ns
dXNpb25UcmFja2VyVGVzdE92ZXJsYXBwaW5nU3VyZmFjZVNpYmxpbmdzV2l0aFR3b1RyYW5zZm9y
bXM6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2Vy
VGVzdEFuaW1hdGlvbk9wYWNpdHkxT25NYWluVGhyZWFkOjpydW5NeVRlc3QpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RBbmltYXRpb25PcGFjaXR5ME9uTWFp
blRocmVhZDo6cnVuTXlUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRy
YWNrZXJUZXN0QW5pbWF0aW9uVHJhbnNsYXRlT25NYWluVGhyZWFkOjpydW5NeVRlc3QpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RSZXBsaWNhT2NjbHVkZWQ6
OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVz
dFN1cmZhY2VXaXRoUmVwbGljYVVub2NjbHVkZWQ6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdFN1cmZhY2VBbmRSZXBsaWNhT2NjbHVkZWRE
aWZmZXJlbnRseTo6cnVuTXlUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lv
blRyYWNrZXJUZXN0U3VyZmFjZUNoaWxkT2ZTdXJmYWNlOjpydW5NeVRlc3QpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RTdXJmYWNlQ2hpbGRPZkNsaXBwaW5n
U3VyZmFjZTo6cnVuTXlUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKEND
T2NjbHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRG
aWx0ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3REb250
T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXI6OnJ1bk15VGVzdCk6CisgICAg
ICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0VHdvQmFja2dyb3VuZEZpbHRlcnNSZWR1Y2VPY2Ns
dXNpb25Ud2ljZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVz
dFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2U6OnJ1bk15VGVzdCk6Cisg
ICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JC
YWNrZ3JvdW5kRmlsdGVyV2l0aENsaXApOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVz
aW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXJX
aXRoQ2xpcDo6cnVuTXlUZXN0KToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250
UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVyKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lvbkJlbG93QmFja2dy
b3VuZEZpbHRlcjo6cnVuTXlUZXN0KToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlclRlc3RE
b250UmVkdWNlT2NjbHVzaW9uSWZCYWNrZ3JvdW5kRmlsdGVySXNPY2NsdWRlZCk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdERvbnRSZWR1Y2VPY2NsdXNpb25J
ZkJhY2tncm91bmRGaWx0ZXJJc09jY2x1ZGVkOjpydW5NeVRlc3QpOgorICAgICAgICAoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvbldoZW5CYWNrZ3JvdW5kRmlsdGVySXNQYXJ0
aWFsbHlPY2NsdWRlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2Vy
VGVzdFJlZHVjZU9jY2x1c2lvbldoZW5CYWNrZ3JvdW5kRmlsdGVySXNQYXJ0aWFsbHlPY2NsdWRl
ZDo6cnVuTXlUZXN0KToKKwogMjAxMi0wNS0wMiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUeXBlRXJyb3I6IENhbm5vdCBj
YWxsIG1ldGhvZCAnY3JlYXRlTGl2ZUxvY2F0aW9uJyBvZiB1bmRlZmluZWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmggYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oCmluZGV4
IDJiNTk0MGM5NDIwNjVmMThkMDcyZjI5ZDlhOGZjNzk3ZWMyNDU2YjguLjdjYjdlM2ZiYmFjMTdi
ZjgwMzI1MjhiN2EwZDQ0MDc4YThmYzAyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaApAQCAtNzUsNyArNzUsOCBAQCBz
dHJ1Y3QgV2ViQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBX
ZWJGaWx0ZXJPcGVyYXRpb24gewogICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
VHlwZUludmVydCA9IDUsCiAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJUeXBl
QnJpZ2h0bmVzcyA9IDcsCiAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJUeXBl
Q29udHJhc3QgPSA4Ci0gICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNhdXNlIHRoaXMg
aXMgbW9yZSBleHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0aGUgbGF5ZXIu
CisgICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNhdXNlIHRoaXMgaXMgbW9yZSBleHBl
bnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0aGUgbGF5ZXIsCisgICAgICAgIC8v
IGFuZCBvcGFjaXR5IGlzIG5vdCBhbGxvd2VkIGZvciBiYWNrZ3JvdW5kIGZpbHRlcnMuCiAgICAg
fTsKIAogICAgIFdlYkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlclR5cGUgdHlwZSwgZmxvYXQgYW1vdW50KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNp
b25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKaW5kZXggNDRhNjhiYTUyMTQwOTIwOTJiYzYwZmFl
NDA0ZGFjYjkzZjlkOTI5Mi4uNTZlZGZmODRiZWU3MjNkY2JmYzAzNjQ3ZTBkNjNmZDVkZjQ1MGQw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCkBAIC0xNTYsNiArMTU2
LDcwIEBAIHN0YXRpYyBpbmxpbmUgUmVnaW9uIHRyYW5zZm9ybVN1cmZhY2VPcGFxdWVSZWdpb24o
Y29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhCiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVn
aW9uOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmVkdWNlT2NjbHVzaW9uKGNvbnN0IEludFJl
Y3QmIGFmZmVjdGVkQXJlYSwgY29uc3QgSW50UmVjdCYgZXhwYW5kZWRQaXhlbCwgUmVnaW9uJiBv
Y2NsdXNpb24pCit7CisgICAgaWYgKGFmZmVjdGVkQXJlYS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZ2lvbiBhZmZlY3RlZE9jY2x1c2lvbiA9IGludGVyc2VjdChvY2NsdXNp
b24sIGFmZmVjdGVkQXJlYSk7CisgICAgVmVjdG9yPEludFJlY3Q+IGFmZmVjdGVkT2NjbHVzaW9u
UmVjdHMgPSBhZmZlY3RlZE9jY2x1c2lvbi5yZWN0cygpOworCisgICAgb2NjbHVzaW9uLnN1YnRy
YWN0KGFmZmVjdGVkQXJlYSk7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBhZmZlY3RlZE9j
Y2x1c2lvblJlY3RzLnNpemUoKTsgKytqKSB7CisgICAgICAgIEludFJlY3QmIG9jY2x1c2lvblJl
Y3QgPSBhZmZlY3RlZE9jY2x1c2lvblJlY3RzW2pdOworCisgICAgICAgIC8vIFNocmluayB0aGUg
cmVjdCBieSBleHBhbmRpbmcgdGhlIG5vbi1vcGFxdWUgcGl4ZWxzIG91dHNpZGUgdGhlIHJlY3Qu
CisKKyAgICAgICAgLy8gVGhlIGV4cGFuZGVkUGl4ZWwgaXMgdGhlIEludFJlY3QgZm9yIGEgc2lu
Z2xlIHBpeGVsIGFmdGVyIGJlaW5nCisgICAgICAgIC8vIGV4cGFuZGVkIGJ5IGZpbHRlcnMgb24g
dGhlIGxheWVyLiBUaGUgb3JpZ2luYWwgcGl4ZWwgd291bGQgYmUKKyAgICAgICAgLy8gSW50UmVj
dCgwLCAwLCAxLCAxKSwgYW5kIHRoZSBleHBhbmRlZCBwaXhlbCBpcyB0aGUgcmVjdCwgcmVsYXRp
dmUKKyAgICAgICAgLy8gdG8gdGhpcyBvcmlnaW5hbCByZWN0LCB0aGF0IHRoZSBvcmlnaW5hbCBw
aXhlbCBjYW4gaW5mbHVlbmNlIGFmdGVyCisgICAgICAgIC8vIGJlaW5nIGZpbHRlcmVkLgorICAg
ICAgICAvLyBUbyBjb252ZXJ0IHRoZSBleHBhbmRlZFBpeGVsIEludFJlY3QgYmFjayB0byBmaWx0
ZXIgb3V0c2V0czoKKyAgICAgICAgLy8geCA9IC1sZWZ0T3V0c2V0CisgICAgICAgIC8vIHdpZHRo
ID0gbGVmdE91dHNldCArIHJpZ2h0T3V0c2V0CisgICAgICAgIC8vIG1heFggPSB4ICsgd2lkdGgg
PSAtbGVmdE91dHNldCArIGxlZnRPdXRzZXQgKyByaWdodE91dHNldCA9IHJpZ2h0T3V0c2V0CisK
KyAgICAgICAgLy8gVGhlIGxlZnRPdXRzZXQgb2YgdGhlIGZpbHRlcnMgbW92ZXMgcGl4ZWxzIG9u
IHRoZSByaWdodCBzaWRlIG9mCisgICAgICAgIC8vIHRoZSBvY2NsdXNpb25SZWN0IGludG8gaXQs
IHNocmlua2luZyBpdHMgcmlnaHQgZWRnZS4KKyAgICAgICAgaW50IHNocmlua0xlZnQgPSBvY2Ns
dXNpb25SZWN0LngoKSA9PSBhZmZlY3RlZEFyZWEueCgpID8gMCA6IGV4cGFuZGVkUGl4ZWwubWF4
WCgpOworICAgICAgICBpbnQgc2hyaW5rVG9wID0gb2NjbHVzaW9uUmVjdC55KCkgPT0gYWZmZWN0
ZWRBcmVhLnkoKSA/IDAgOiBleHBhbmRlZFBpeGVsLm1heFkoKTsKKyAgICAgICAgaW50IHNocmlu
a1JpZ2h0ID0gb2NjbHVzaW9uUmVjdC5tYXhYKCkgPT0gYWZmZWN0ZWRBcmVhLm1heFgoKSA/IDAg
OiAtZXhwYW5kZWRQaXhlbC54KCk7CisgICAgICAgIGludCBzaHJpbmtCb3R0b20gPSBvY2NsdXNp
b25SZWN0Lm1heFkoKSA9PSBhZmZlY3RlZEFyZWEubWF4WSgpID8gMCA6IC1leHBhbmRlZFBpeGVs
LnkoKTsKKworICAgICAgICBvY2NsdXNpb25SZWN0Lm1vdmUoc2hyaW5rTGVmdCwgc2hyaW5rVG9w
KTsKKyAgICAgICAgb2NjbHVzaW9uUmVjdC5jb250cmFjdChzaHJpbmtMZWZ0ICsgc2hyaW5rUmln
aHQsIHNocmlua1RvcCArIHNocmlua0JvdHRvbSk7CisKKyAgICAgICAgb2NjbHVzaW9uLnVuaXRl
KG9jY2x1c2lvblJlY3QpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3Vy
ZmFjZVR5cGU+CitzdGF0aWMgdm9pZCByZWR1Y2VPY2NsdXNpb25CZWxvd1N1cmZhY2UoUmVuZGVy
U3VyZmFjZVR5cGUqIHN1cmZhY2UsIGNvbnN0IEludFJlY3QmIHN1cmZhY2VSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VyZmFjZVRyYW5zZm9ybSwgUmVuZGVyU3VyZmFjZVR5cGUq
IHN1cmZhY2VUYXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5UYXJnZXQsIFJlZ2lvbiYgb2NjbHVz
aW9uSW5TY3JlZW4pCit7CisgICAgaWYgKHN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50UmVjdCBib3VuZHNJblRhcmdldCA9IGVuY2xvc2luZ0ludFJlY3Qo
Q0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3Qoc3VyZmFjZVRyYW5zZm9ybSwgRmxvYXRSZWN0KHN1
cmZhY2VSZWN0KSkpOworICAgIGlmICghc3VyZmFjZS0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkpCisg
ICAgICAgIGJvdW5kc0luVGFyZ2V0LmludGVyc2VjdChzdXJmYWNlLT5jbGlwUmVjdCgpKTsKKwor
ICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQ7
CisgICAgc3VyZmFjZS0+YmFja2dyb3VuZEZpbHRlcnMoKS5nZXRPdXRzZXRzKG91dHNldFRvcCwg
b3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisKKyAgICAvLyBUaGUgZmls
dGVyIGNhbiBtb3ZlIHBpeGVscyBmcm9tIG91dHNpZGUgb2YgdGhlIGNsaXAsIHNvIGFsbG93IGFm
ZmVjdGVkQXJlYSB0byBleHBhbmQgb3V0c2lkZSB0aGUgY2xpcC4KKyAgICBib3VuZHNJblRhcmdl
dC5tb3ZlKC1vdXRzZXRMZWZ0LCAtb3V0c2V0VG9wKTsKKyAgICBib3VuZHNJblRhcmdldC5leHBh
bmQob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOwor
CisgICAgSW50UmVjdCBib3VuZHNJblNjcmVlbiA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRp
bDo6bWFwQ2xpcHBlZFJlY3Qoc3VyZmFjZVRhcmdldC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwg
RmxvYXRSZWN0KGJvdW5kc0luVGFyZ2V0KSkpOworCisgICAgSW50UmVjdCBmaWx0ZXJPdXRzZXRz
SW5UYXJnZXQoLW91dHNldExlZnQsIC1vdXRzZXRUb3AsIG91dHNldExlZnQgKyBvdXRzZXRSaWdo
dCwgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICBJbnRSZWN0IGZpbHRlck91dHNldHNJ
blNjcmVlbiA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3Qoc3Vy
ZmFjZVRhcmdldC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwgRmxvYXRSZWN0KGZpbHRlck91dHNl
dHNJblRhcmdldCkpKTsKKworICAgIHJlZHVjZU9jY2x1c2lvbihib3VuZHNJblRhcmdldCwgZmls
dGVyT3V0c2V0c0luVGFyZ2V0LCBvY2NsdXNpb25JblRhcmdldCk7CisgICAgcmVkdWNlT2NjbHVz
aW9uKGJvdW5kc0luU2NyZWVuLCBmaWx0ZXJPdXRzZXRzSW5TY3JlZW4sIG9jY2x1c2lvbkluU2Ny
ZWVuKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJT
dXJmYWNlVHlwZT4KIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlPjo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3Vy
ZmFjZVR5cGUqIG5ld1RhcmdldCkKIHsKQEAgLTE3MCw5ICsyMzQsMTYgQEAgdm9pZCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpsZWF2ZVRvVGFy
Z2V0UmVuZGVyU3UKICAgICBpZiAob2xkVGFyZ2V0LT5oYXNSZXBsaWNhKCkpCiAgICAgICAgIG9s
ZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0LnVuaXRlKHRyYW5zZm9ybVN1cmZhY2VPcGFxdWVS
ZWdpb248UmVuZGVyU3VyZmFjZVR5cGU+KG9sZFRhcmdldCwgbV9zdGFja1tsYXN0SW5kZXhdLm9j
Y2x1c2lvbkluVGFyZ2V0LCBvbGRUYXJnZXQtPnJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSkpOwog
CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkU3VyZmFjZVJlY3Q7CisgICAgSW50UmVjdCB1bm9jY2x1
ZGVkUmVwbGljYVJlY3Q7CisgICAgaWYgKG9sZFRhcmdldC0+YmFja2dyb3VuZEZpbHRlcnMoKS5o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkgeworICAgICAgICB1bm9jY2x1ZGVkU3VyZmFjZVJl
Y3QgPSB1bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KG9sZFRhcmdldCwg
ZmFsc2UsIG9sZFRhcmdldC0+Y29udGVudFJlY3QoKSk7CisgICAgICAgIGlmIChvbGRUYXJnZXQt
Pmhhc1JlcGxpY2EoKSkKKyAgICAgICAgICAgIHVub2NjbHVkZWRSZXBsaWNhUmVjdCA9IHVub2Nj
bHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qob2xkVGFyZ2V0LCB0cnVlLCBvbGRU
YXJnZXQtPmNvbnRlbnRSZWN0KCkpOworICAgIH0KKwogICAgIGlmIChzdXJmYWNlV2lsbEJlQXRU
b3BBZnRlclBvcCkgewogICAgICAgICAvLyBNZXJnZSB0aGUgdG9wIG9mIHRoZSBzdGFjayBkb3du
LgotCiAgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVzaW9uSW5TY3JlZW4udW5p
dGUobV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluU2NyZWVuKTsKICAgICAgICAgbV9zdGFj
a1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblRhcmdldC51bml0ZShvbGRUYXJnZXRPY2NsdXNp
b25Jbk5ld1RhcmdldCk7CiAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwpAQCAtMTgxLDYg
KzI1MiwxMiBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJT
dXJmYWNlVHlwZT46OmxlYXZlVG9UYXJnZXRSZW5kZXJTdQogICAgICAgICBtX3N0YWNrLmxhc3Qo
KS5zdXJmYWNlID0gbmV3VGFyZ2V0OwogICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25J
blRhcmdldCA9IG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0OwogICAgIH0KKworICAgIGlm
IChvbGRUYXJnZXQtPmJhY2tncm91bmRGaWx0ZXJzKCkuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KCkpIHsKKyAgICAgICAgcmVkdWNlT2NjbHVzaW9uQmVsb3dTdXJmYWNlKG9sZFRhcmdldCwgdW5v
Y2NsdWRlZFN1cmZhY2VSZWN0LCBvbGRUYXJnZXQtPm9yaWdpblRyYW5zZm9ybSgpLCBuZXdUYXJn
ZXQsIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LCBtX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblNjcmVlbik7CisgICAgICAgIGlmIChvbGRUYXJnZXQtPmhhc1JlcGxpY2EoKSkKKyAg
ICAgICAgICAgIHJlZHVjZU9jY2x1c2lvbkJlbG93U3VyZmFjZShvbGRUYXJnZXQsIHVub2NjbHVk
ZWRSZXBsaWNhUmVjdCwgb2xkVGFyZ2V0LT5yZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCksIG5ld1Rh
cmdldCwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQsIG1fc3RhY2subGFzdCgpLm9j
Y2x1c2lvbkluU2NyZWVuKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4KQEAgLTM2NywxMSArNDQ0LDExIEBAIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1J
bnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZT46OnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QoY29uc3QgTGF5ZXJU
eXBlKiBsYXllciwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkg
Y29uc3QKK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjb25z
dCBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgp
KTsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hpbGUgdGhlIGNvbnRyaWJ1dGluZyBy
ZW5kZXIgc3VyZmFjZSBpcyBzdGlsbCBjb25zaWRlcmVkIHRoZSBjdXJyZW50IHRhcmdldCBpbiB0
aGUgb2NjbHVzaW9uIHRyYWNrZXIuCi0gICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CisgICAgQVNTRVJUKHN1cmZhY2UgPT0g
bV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKICAgICAvLyBBIGNvbnRyaWJ1dGluZyBzdXJmYWNl
IGRvZXNuJ3QgZ2V0IG9jY2x1ZGVkIGJ5IHRoaW5ncyBpbnNpZGUgaXRzIG93biBzdXJmYWNlLCBz
byBvbmx5IHRoaW5ncyBvdXRzaWRlIHRoZSBzdXJmYWNlIGNhbiBvY2NsdWRlIGl0LiBUaGF0IG9j
Y2x1c2lvbiBpcwogICAgIC8vIGZvdW5kIGp1c3QgYmVsb3cgdGhlIHRvcCBvZiB0aGUgc3RhY2sg
KGlmIGl0IGV4aXN0cykuCkBAIC0zODAsNyArNDU3LDYgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRy
YWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udHJp
YnUKICAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gY29udGVu
dFJlY3Q7CiAKLSAgICBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSA9IGxheWVyLT5yZW5kZXJT
dXJmYWNlKCk7CiAgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21f
c3RhY2suc2l6ZSgpIC0gMl07CiAKICAgICBJbnRSZWN0IHN1cmZhY2VDbGlwUmVjdCA9IHN1cmZh
Y2UtPmNsaXBSZWN0KCk7CkBAIC00MjYsNyArNTAyLDcgQEAgdGVtcGxhdGUgdm9pZCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46Omxl
YXYKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjb25zdCBMYXll
ckNocm9taXVtKik7CiB0ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6b2NjbHVkZWQoY29uc3QgTGF5ZXJDaHJv
bWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKIHRlbXBsYXRlIEludFJl
Y3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKLXRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1bm9j
Y2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNvbnN0IExheWVyQ2hyb21pdW0q
LCBib29sIGZvclJlcGxpY2EsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKK3Rl
bXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0+Ojp1bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRS
ZWN0KGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSosIGJvb2wgZm9yUmVwbGljYSwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OmxheWVy
U2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgTGF5ZXJDaHJvbWl1bSopIGNvbnN0Owog
CiB0ZW1wbGF0ZSBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1
cmZhY2U+OjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNjcmVl
blNwYWNlLCBib29sIHJlY29yZE1ldHJpY3NGb3JGcmFtZSk7CkBAIC00MzgsNyArNTE0LDcgQEAg
dGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRl
clN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2UKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2Vy
QmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5
ZXIoY29uc3QgQ0NMYXllckltcGwqKTsKIHRlbXBsYXRlIGJvb2wgQ0NPY2NsdXNpb25UcmFja2Vy
QmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6b2NjbHVkZWQoY29uc3QgQ0NMYXll
ckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBJbnRS
ZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46
OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBDQ0xheWVySW1wbCosIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KSBjb25zdDsKLXRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2Vy
QmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6dW5vY2NsdWRlZENvbnRyaWJ1dGlu
Z1N1cmZhY2VDb250ZW50UmVjdChjb25zdCBDQ0xheWVySW1wbCosIGJvb2wgZm9yUmVwbGljYSwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgSW50UmVjdCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Ojp1bm9jY2x1
ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNvbnN0IENDUmVuZGVyU3VyZmFjZSos
IGJvb2wgZm9yUmVwbGljYSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwogdGVt
cGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRl
clN1cmZhY2U+OjpsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKGNvbnN0IENDTGF5ZXJJ
bXBsKikgY29uc3Q7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaAppbmRleCAy
NzA1YzZiMTMzMWRmZDk0ZmI1YTgzZjcwNmNiNDE4ZmJlMWFiYjc5Li5iODAyY2M2NDNjZTRhNDIw
ZDNhYTAzZWFiYzk5ZmIyODRiMGRlNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNr
ZXIuaApAQCAtNTksOSArNTksOSBAQCBwdWJsaWM6CiAgICAgLy8gR2l2ZXMgYW4gdW5vY2NsdWRl
ZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGluIHRoZSBjb250ZW50IHNwYWNlIG9mIHRoZSBs
YXllci4gVXNlZCB3aGVuIGNvbnNpZGVyaW5nIG9jY2x1c2lvbiBmb3IgYSBsYXllciB0aGF0IHBh
aW50cy9kcmF3cyBzb21ldGhpbmcuCiAgICAgSW50UmVjdCB1bm9jY2x1ZGVkQ29udGVudFJlY3Qo
Y29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwogCi0g
ICAgLy8gR2l2ZXMgYW4gdW5vY2NsdWRlZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGluIHRo
ZSBjb250ZW50IHNwYWNlIG9mIHRoZSBzdXJmYWNlIG93bmVkIGJ5IHxsYXllcnwuIFVzZWQgd2hl
biBjb25zaWRlcmluZyBvY2NsdXNpb24gZm9yIGEgY29udHJpYnV0aW5nIHN1cmZhY2UKKyAgICAv
LyBHaXZlcyBhbiB1bm9jY2x1ZGVkIHN1Yi1yZWN0IG9mIHxjb250ZW50UmVjdHwgaW4gdGhlIGNv
bnRlbnQgc3BhY2Ugb2YgdGhlIHN1cmZhY2UuIFVzZWQgd2hlbiBjb25zaWRlcmluZyBvY2NsdXNp
b24gZm9yIGEgY29udHJpYnV0aW5nIHN1cmZhY2UKICAgICAvLyB0aGF0IGlzIHJlbmRlcmluZyBp
bnRvIGFub3RoZXIgdGFyZ2V0IHN1cmZhY2UuCi0gICAgSW50UmVjdCB1bm9jY2x1ZGVkQ29udHJp
YnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSosIGJvb2wgZm9yUmVwbGlj
YSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OworICAgIEludFJlY3QgdW5vY2Ns
dWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjb25zdCBSZW5kZXJTdXJmYWNlVHlw
ZSosIGJvb2wgZm9yUmVwbGljYSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Owog
CiAgICAgLy8gUmVwb3J0IG9wZXJhdGlvbnMgZm9yIHJlY29yZGluZyBvdmVyZHJhdyBtZXRyaWNz
LgogICAgIENDT3ZlcmRyYXdNZXRyaWNzJiBvdmVyZHJhd01ldHJpY3MoKSBjb25zdCB7IHJldHVy
biAqbV9vdmVyZHJhd01ldHJpY3MuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCmlu
ZGV4IDk0ZDFkNjcwNGYyMTJkNzQ5MWM0NTIyZjhiNmM1MGEzYjZiN2JjYzMuLmU1ZmQ2OTBjY2Vh
MjBhMzg1ZjUyMmU5YTUzZmM2MDBiMzI1NjkwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNw
cApAQCAtNzEsMTMgKzcxLDEzIEBAIGJvb2wgQ0NRdWFkQ3VsbGVyOjphcHBlbmQoUGFzc093blB0
cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpCiAKIGJvb2wgQ0NRdWFkQ3VsbGVyOjphcHBlbmRT
dXJmYWNlKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcGFzc0RyYXdRdWFkKQogewotICAgIEludFJl
Y3QgY3VsbGVkUmVjdCA9IG1fb2NjbHVzaW9uVHJhY2tlci0+dW5vY2NsdWRlZENvbnRyaWJ1dGlu
Z1N1cmZhY2VDb250ZW50UmVjdChtX2xheWVyLCBmYWxzZSwgcGFzc0RyYXdRdWFkLT5xdWFkUmVj
dCgpKTsKKyAgICBJbnRSZWN0IGN1bGxlZFJlY3QgPSBtX29jY2x1c2lvblRyYWNrZXItPnVub2Nj
bHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QobV9sYXllci0+cmVuZGVyU3VyZmFj
ZSgpLCBmYWxzZSwgcGFzc0RyYXdRdWFkLT5xdWFkUmVjdCgpKTsKICAgICByZXR1cm4gYXBwZW5k
UXVhZEludGVybmFsKHBhc3NEcmF3UXVhZCwgY3VsbGVkUmVjdCwgbV9xdWFkTGlzdCwgKm1fb2Nj
bHVzaW9uVHJhY2tlcik7CiB9CiAKIGJvb2wgQ0NRdWFkQ3VsbGVyOjphcHBlbmRSZXBsaWNhKFBh
c3NPd25QdHI8Q0NEcmF3UXVhZD4gcGFzc0RyYXdRdWFkKQogewotICAgIEludFJlY3QgY3VsbGVk
UmVjdCA9IG1fb2NjbHVzaW9uVHJhY2tlci0+dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VD
b250ZW50UmVjdChtX2xheWVyLCB0cnVlLCBwYXNzRHJhd1F1YWQtPnF1YWRSZWN0KCkpOworICAg
IEludFJlY3QgY3VsbGVkUmVjdCA9IG1fb2NjbHVzaW9uVHJhY2tlci0+dW5vY2NsdWRlZENvbnRy
aWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChtX2xheWVyLT5yZW5kZXJTdXJmYWNlKCksIHRydWUs
IHBhc3NEcmF3UXVhZC0+cXVhZFJlY3QoKSk7CiAgICAgcmV0dXJuIGFwcGVuZFF1YWRJbnRlcm5h
bChwYXNzRHJhd1F1YWQsIGN1bGxlZFJlY3QsIG1fcXVhZExpc3QsICptX29jY2x1c2lvblRyYWNr
ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2Nj
bHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRleCA0MWZiNWE1MWY1NGU2ZTUyZjUyZWYxZTFkMmI5
ZDc2OTYyYmUwMWJlLi45NGI2MDY0ZWQ1NTY4ZTJkOWUzZDBiNDY1YWZhZmUzOGQ3ZDA2YzViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tl
clRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25U
cmFja2VyVGVzdC5jcHAKQEAgLTEwMTEsNyArMTAxMSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAg
b2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgtMjAsIC0yMCwgMTAwMCwgMTAw
MCkpOwogCiAgICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgYWJvdmUgY2hpbGQyJ3Mgc3VyZmFj
ZSBpbiB0aGUgei1vcmRlci4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgtMTAsIDQy
MCwgNzAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVu
dFJlY3QoY2hpbGQyLCBmYWxzZSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDIwLCA3MCwgODApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjaGlsZDItPnJlbmRlclN1cmZh
Y2UoKSwgZmFsc2UsIEludFJlY3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKIAogICAgICAgICB0aGlz
LT5sZWF2ZUNvbnRyaWJ1dGluZ1N1cmZhY2UoY2hpbGQyLCBvY2NsdXNpb24pOwogICAgICAgICB0
aGlzLT52aXNpdExheWVyKGxheWVyMSwgb2NjbHVzaW9uKTsKQEAgLTEwMjksNyArMTAyOSw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGls
ZDEsIEludFJlY3QoLTEwLCA0MzAsIDgwLCA3MSkpKTsKIAogICAgICAgICAvLyBjaGlsZDIncyBj
b250ZW50cyB3aWxsIG9jY2x1ZGUgY2hpbGQxIGJlbG93IGl0LgotICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KC0xMCwgNDMwLCAxMCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRy
aWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjaGlsZDEsIGZhbHNlLCBJbnRSZWN0KC0xMCwgNDMw
LCA4MCwgNzApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0MzAsIDEw
LCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0
KGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwgSW50UmVjdCgtMTAsIDQzMCwgODAsIDcw
KSkpOwogCiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFjZShjaGlsZDEsIG9j
Y2x1c2lvbik7CiAgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIocGFyZW50LCBvY2NsdXNpb24pOwpA
QCAtMTEyMCw3ICsxMTIwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB0aGlzLT5lbnRlckNvbnRy
aWJ1dGluZ1N1cmZhY2UoY2hpbGQyLCBvY2NsdXNpb24pOwogCiAgICAgICAgIC8vIFRoZXJlIGlz
IG5vdGhpbmcgYWJvdmUgY2hpbGQyJ3Mgc3VyZmFjZSBpbiB0aGUgei1vcmRlci4KLSAgICAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QoY2hpbGQyLCBmYWxzZSwgSW50UmVj
dCgtMTAsIDQyMCwgNzAsIDgwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0x
MCwgNDIwLCA3MCwgODApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VD
b250ZW50UmVjdChjaGlsZDItPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoLTEwLCA0
MjAsIDcwLCA4MCkpKTsKIAogICAgICAgICB0aGlzLT5sZWF2ZUNvbnRyaWJ1dGluZ1N1cmZhY2Uo
Y2hpbGQyLCBvY2NsdXNpb24pOwogICAgICAgICB0aGlzLT52aXNpdExheWVyKGxheWVyMSwgb2Nj
bHVzaW9uKTsKQEAgLTExMzgsOSArMTEzOCw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgRVhQRUNU
X0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDEsIEludFJlY3QoNDIxLCAtMjAsIDgwLCA5
MCkpKTsKIAogICAgICAgICAvLyBjaGlsZDIncyBjb250ZW50cyB3aWxsIG9jY2x1ZGUgY2hpbGQx
IGJlbG93IGl0LgotICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQyMCwgLTIwLCA4MCwg
OTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChj
aGlsZDEsIGZhbHNlLCBJbnRSZWN0KDQyMCwgLTIwLCA4MCwgOTApKSk7Ci0gICAgICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoNDkwLCAtMTAsIDEwLCA4MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkMSwgZmFsc2UsIEludFJlY3QoNDIw
LCAtMTAsIDgwLCA5MCkpKTsKLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MjAsIC0y
MCwgNzAsIDEwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVu
dFJlY3QoY2hpbGQxLCBmYWxzZSwgSW50UmVjdCg0MjAsIC0yMCwgNzAsIDkwKSkpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQyMCwgLTIwLCA4MCwgOTApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKSwgZmFsc2UsIEludFJlY3QoNDIwLCAtMjAsIDgwLCA5MCkpKTsKKyAgICAgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCg0OTAsIC0xMCwgMTAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCksIGZh
bHNlLCBJbnRSZWN0KDQyMCwgLTEwLCA4MCwgOTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoNDIwLCAtMjAsIDcwLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0
aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwgSW50
UmVjdCg0MjAsIC0yMCwgNzAsIDkwKSkpOwogCiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0
aW5nU3VyZmFjZShjaGlsZDEsIG9jY2x1c2lvbik7CiAgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIo
cGFyZW50LCBvY2NsdXNpb24pOwpAQCAtMTk3MCw3ICsxOTcwLDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgICAgIHRoaXMtPmVudGVyQ29udHJpYnV0aW5nU3VyZmFjZShzdXJmYWNlLCBvY2NsdXNpb24p
OwogICAgICAgICAvLyBPY2NsdXNpb24gd2l0aGluIHRoZSBzdXJmYWNlIGlzIGxvc3Qgd2hlbiBs
ZWF2aW5nIHRoZSBhbmltYXRpbmcgc3VyZmFjZS4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgwLCAwLCAyNTAsIDMwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3Vy
ZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDI1MCwgMzAwKSwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZS0+cmVu
ZGVyU3VyZmFjZSgpLCBmYWxzZSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKICAgICAgICAg
dGhpcy0+bGVhdmVDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAKICAg
ICAgICAgdGhpcy0+dmlzaXRMYXllcihsYXllciwgb2NjbHVzaW9uKTsKQEAgLTIwMjIsNyArMjAy
Miw3IEBAIHByb3RlY3RlZDoKIAogICAgICAgICB0aGlzLT5lbnRlckNvbnRyaWJ1dGluZ1N1cmZh
Y2Uoc3VyZmFjZSwgb2NjbHVzaW9uKTsKICAgICAgICAgLy8gT2NjbHVzaW9uIHdpdGhpbiB0aGUg
c3VyZmFjZSBpcyBsb3N0IHdoZW4gbGVhdmluZyB0aGUgYW5pbWF0aW5nIHN1cmZhY2UuCi0gICAg
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMjUwLCAzMDApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLCBmYWxzZSwgSW50
UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgw
LCAwLCAyNTAsIDMwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNv
bnRlbnRSZWN0KHN1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoMCwgMCwg
MzAwLCAzMDApKSk7CiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFjZShzdXJm
YWNlLCBvY2NsdXNpb24pOwogCiAgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIobGF5ZXIsIG9jY2x1
c2lvbik7CkBAIC0yMTExLDcgKzIxMTEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgdGhpcy0+
ZW50ZXJDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAgICAgICAgIC8v
IFRoZSBjb250cmlidXRpbmcgfHN1cmZhY2V8IGlzIGFuaW1hdGluZyBzbyBpdCBjYW4ndCBiZSBv
Y2NsdWRlZC4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDMwMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZh
Y2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmli
dXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwg
SW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKICAgICAgICAgdGhpcy0+bGVhdmVDb250cmlidXRp
bmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAKICAgICAgICAgdGhpcy0+ZW50ZXJMYXll
cihsYXllciwgb2NjbHVzaW9uKTsKQEAgLTIyMjYsNyArMjIyNiw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgdGhpcy0+ZW50ZXJDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7
CiAKICAgICAgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgc28gaXQgc2hvdWxkbid0IHRo
aW5rIGl0IGlzLgotICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDEwMCwgMTAw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3Vy
ZmFjZSwgZmFsc2UsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRy
aWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCksIGZhbHNl
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwogICAgIH0KIH07CiAKQEAgLTIyNjQsOCArMjI2
NCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgdGhpcy0+ZW50ZXJDb250cmlidXRpbmdTdXJmYWNl
KHN1cmZhY2UsIG9jY2x1c2lvbik7CiAKICAgICAgICAgLy8gU3VyZmFjZSBpcyBvY2NsdWRlZCwg
YnV0IG9ubHkgdGhlIHRvcCAxMHB4IG9mIHRoZSByZXBsaWNhLgotICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGlu
Z1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLCBmYWxzZSwgSW50UmVjdCgwLCAwLCAxMDAsIDEw
MCkpKTsKLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAxMCwgMTAwLCA5MCksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2Us
IHRydWUsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMCwgMCwgMCwgMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3Vy
ZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3Qo
MCwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMTAs
IDEwMCwgOTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50
UmVjdChzdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCksIHRydWUsIEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKSk7CiAgICAgfQogfTsKIApAQCAtMjMwNSw4ICsyMzA1LDggQEAgcHJvdGVjdGVkOgogICAg
ICAgICB0aGlzLT5lbnRlckNvbnRyaWJ1dGluZ1N1cmZhY2Uoc3VyZmFjZSwgb2NjbHVzaW9uKTsK
IAogICAgICAgICAvLyBTdXJmYWNlIGFuZCByZXBsaWNhIGFyZSBvY2NsdWRlZCBkaWZmZXJlbnQg
YW1vdW50cy4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MCwgMCwgNjAsIDEwMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZh
Y2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwotICAgICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDUwLCAwLCA1MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmli
dXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZSwgdHJ1ZSwgSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MCwgMCwgNjAsIDEwMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZh
Y2UtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7Cisg
ICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDAsIDUwLCAxMDApLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLT5yZW5kZXJT
dXJmYWNlKCksIHRydWUsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CiAgICAgfQogfTsKIApA
QCAtMjM1MSw3ICsyMzUxLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB0aGlzLT5lbnRlckNvbnRy
aWJ1dGluZ1N1cmZhY2Uoc3VyZmFjZUNoaWxkLCBvY2NsdXNpb24pOwogICAgICAgICAvLyBUaGUg
c3VyZmFjZUNoaWxkJ3MgcGFyZW50IGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCBhcyBpdCBvd25z
IGEgcmVuZGVyIHN1cmZhY2UuIE1ha2Ugc3VyZSB0aGUgdW5vY2NsdWRlZCByZWN0CiAgICAgICAg
IC8vIGRvZXMgbm90IGdldCBjbGlwcGVkIGF3YXkgaW5hcHByb3ByaWF0ZWx5LgotICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQwLCAxMDAsIDEwKSwgb2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZUNoaWxkLCBmYWxzZSwgSW50
UmVjdCgwLCAwLCAxMDAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAs
IDQwLCAxMDAsIDEwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29u
dGVudFJlY3Qoc3VyZmFjZUNoaWxkLT5yZW5kZXJTdXJmYWNlKCksIGZhbHNlLCBJbnRSZWN0KDAs
IDAsIDEwMCwgNTApKSk7CiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFjZShz
dXJmYWNlQ2hpbGQsIG9jY2x1c2lvbik7CiAKICAgICAgICAgLy8gV2hlbiB0aGUgc3VyZmFjZUNo
aWxkJ3Mgb2NjbHVzaW9uIGlzIHRyYW5zZm9ybWVkIHVwIHRvIGl0cyBwYXJlbnQsIG1ha2Ugc3Vy
ZSBpdCBpcyBub3QgY2xpcHBlZCBhd2F5IGluYXBwcm9wcmlhdGVseSBhbHNvLgpAQCAtMjM2NCw3
ICsyMzY0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIHRoaXMtPmVudGVyQ29udHJpYnV0aW5n
U3VyZmFjZShzdXJmYWNlLCBvY2NsdXNpb24pOwogICAgICAgICAvLyBUaGUgc3VyZmFjZSdzIHBh
cmVudCBkb2VzIGhhdmUgYSBjbGlwUmVjdCBhcyBpdCBpcyB0aGUgcm9vdCBsYXllci4KLSAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UsIGZhbHNlLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAs
IDUwLCAxMDAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29u
dGVudFJlY3Qoc3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwgSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCkpKTsKICAgICB9CiB9OwogCkBAIC0yMzg3LDggKzIzODcsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAw
MCwgMTAwMCkpOwogCiAgICAgICAgIC8vIHx0b3Btb3N0fCBvY2NsdWRlcyBldmVyeXRoaW5nIHBh
cnRpYWxseSBzbyB3ZSBrbm93IG9jY2x1c2lvbiBpcyBoYXBwZW5pbmcgYXQgYWxsLgotICAgICAg
ICB0aGlzLT5lbnRlckxheWVyKHRvcG1vc3QsIG9jY2x1c2lvbik7Ci0gICAgICAgIHRoaXMtPmxl
YXZlTGF5ZXIodG9wbW9zdCwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcih0
b3Btb3N0LCBvY2NsdXNpb24pOwogCiAgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwg
MCwgODAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7
CiAgICAgICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2Uo
KS5yZWN0cygpLnNpemUoKSk7CkBAIC0yNDA5LDE2ICsyNDA4LDUwMSBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICAgICAgdGhpcy0+ZW50ZXJDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2VDaGlsZCwgb2Nj
bHVzaW9uKTsKICAgICAgICAgLy8gVGhlIHN1cmZhY2VDaGlsZCdzIHBhcmVudCBkb2VzIG5vdCBo
YXZlIGEgY2xpcFJlY3QgYXMgaXQgb3ducyBhIHJlbmRlciBzdXJmYWNlLgotICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDAsIDUwLCA4MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlQ2hpbGQsIGZhbHNlLCBJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDUw
LCA4MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50
UmVjdChzdXJmYWNlQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoMCwgMCwg
MTAwLCAxMDApKSk7CiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFjZShzdXJm
YWNlQ2hpbGQsIG9jY2x1c2lvbik7CiAKICAgICAgICAgdGhpcy0+dmlzaXRMYXllcihzdXJmYWNl
LCBvY2NsdXNpb24pOwogICAgICAgICB0aGlzLT5lbnRlckNvbnRyaWJ1dGluZ1N1cmZhY2Uoc3Vy
ZmFjZSwgb2NjbHVzaW9uKTsKICAgICAgICAgLy8gVGhlIHN1cmZhY2UncyBwYXJlbnQgZG9lcyBo
YXZlIGEgY2xpcFJlY3QgYXMgaXQgaXMgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMCwgNTAsIDgwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJp
YnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDEw
MCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDUwLCA4MCwgNTAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJm
YWNlLT5yZW5kZXJTdXJmYWNlKCksIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwog
ICAgIH0KIH07CiAKIEFMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0U3VyZmFjZUNoaWxkT2ZDbGlwcGluZ1N1cmZhY2UpOwogCit0ZW1wbGF0ZTxjbGFzcyBU
eXBlcywgYm9vbCBvcGFxdWVMYXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9u
dE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyIDogcHVibGljIENDT2NjbHVz
aW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9wYXF1ZUxheWVycz4geworcHJvdGVjdGVkOgorICAgIHZv
aWQgcnVuTXlUZXN0KCkKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxl
QnlIYWxmOworICAgICAgICBzY2FsZUJ5SGFsZi5zY2FsZSgwLjUpOworCisgICAgICAgIC8vIE1h
a2UgYSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYSwgZWFjaCA1MHg1MCwgdGhhdCBhcmUgY29tcGxl
dGVseSBzdXJyb3VuZGVkIGJ5IG9wYXF1ZSBsYXllcnMgd2hpY2ggYXJlIGFib3ZlIHRoZW0gaW4g
dGhlIHotb3JkZXIuCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGlzIHNjYWxlZCB0byB0ZXN0IHRo
YXQgdGhlIHBpeGVsIG1vdmluZyBpcyBkb25lIGluIHRoZSB0YXJnZXQgc3BhY2UsIHdoZXJlIHRo
ZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBhcHBsaWVkLCBidXQgdGhlIHN1cmZhY2UKKyAgICAgICAg
Ly8gYXBwZWFycyBhdCA1MCwgNTAgYW5kIHRoZSByZXBsaWNhIGF0IDIwMCwgNTAuCisgICAgICAg
IHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVS
b290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwg
MTUwKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFj
ZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHNjYWxlQnlIYWxmLCBGbG9hdFBv
aW50KDUwLCA1MCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgICAgIHRoaXMtPmNy
ZWF0ZVJlcGxpY2FMYXllcihmaWx0ZXJlZFN1cmZhY2UsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDMwMCwgMCksIEludFNpemUoKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpM
YXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJl
bnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwg
NTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5n
TGF5ZXIyID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgzMDAsIDUwKSwgdHJ1ZSk7CisgICAg
ICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMyA9IHRoaXMtPmNy
ZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6
OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI0ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBh
cmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMTAwLCA1MCksIEludFNpemUo
MTAwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2Ns
dWRpbmdMYXllcjUgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsK
KworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1cmZhY2UuCisgICAg
ICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25z
KCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMTAsIFdlYkNvcmU6
OkZpeGVkKSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7CisgICAgICAgIGZpbHRlcmVkU3VyZmFj
ZS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICAgICAgLy8gU2F2ZSB0aGUg
ZGlzdGFuY2Ugb2YgaW5mbHVlbmNlIGZvciB0aGUgYmx1ciBlZmZlY3QuCisgICAgICAgIGludCBv
dXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQ7CisgICAgICAg
IGZpbHRlcnMuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20s
IG91dHNldExlZnQpOworCisgICAgICAgIHRoaXMtPmNhbGNEcmF3RXRjKHBhcmVudCk7CisKKyAg
ICAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcldpdGhTY2lzc29yPHR5cGVuYW1lIFR5cGVzOjpM
YXllclR5cGUsIHR5cGVuYW1lIFR5cGVzOjpSZW5kZXJTdXJmYWNlVHlwZT4gb2NjbHVzaW9uKElu
dFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgICAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lz
c29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKworICAgICAgICAvLyBUaGVzZSBs
YXllcnMgb2NjbHVkZSBwaXhlbHMgZGlyZWN0bHkgYmVzaWRlIHRoZSBmaWx0ZXJlZFN1cmZhY2Uu
IEJlY2F1c2UgZmlsdGVyZWQgc3VyZmFjZSBibGVuZHMgcGl4ZWxzIGluIGEgcmFkaXVzLCBpdCB3
aWxsCisgICAgICAgIC8vIG5lZWQgdG8gc2VlIHNvbWUgb2YgdGhlIHBpeGVscyAodXAgdG8gcmFk
aXVzIGZhcikgdW5kZXJuZWF0aCB0aGUgb2NjbHVkaW5nTGF5ZXJzLgorICAgICAgICB0aGlzLT52
aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyNSwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlz
aXRMYXllcihvY2NsdWRpbmdMYXllcjQsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0
TGF5ZXIob2NjbHVkaW5nTGF5ZXIzLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExh
eWVyKG9jY2x1ZGluZ0xheWVyMiwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXll
cihvY2NsdWRpbmdMYXllcjEsIG9jY2x1c2lvbik7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNl
KCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFj
ZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIEV2ZXJ5dGhp
bmcgb3V0c2lkZSB0aGUgc3VyZmFjZS9yZXBsaWNhIGlzIG9jY2x1ZGVkIGJ1dCB0aGUgc3VyZmFj
ZS9yZXBsaWNhIGl0c2VsZiBpcyBub3QuCisgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIoZmlsdGVy
ZWRTdXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEs
IDAsIDk5LCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3Vy
ZmFjZSwgSW50UmVjdCgxLCAwLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgwLCAxLCAxMDAsIDk5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChm
aWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgMSwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMCwgMCwgOTksIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KC0xLCAwLCAxMDAsIDEwMCkpKTsKKyAg
ICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAxMDAsIDk5KSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgLTEsIDEwMCwg
MTAwKSkpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAwICsgMSwgMCwgOTks
IDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJ
bnRSZWN0KDMwMCArIDEsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDMwMCArIDAsIDEsIDEwMCwgOTkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgzMDAgKyAwLCAxLCAxMDAsIDEwMCkpKTsKKyAg
ICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMDAgKyAwLCAwLCA5OSwgMTAwKSwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMzAwIC0g
MSwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAwICsg
MCwgMCwgMTAwLCA5OSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRT
dXJmYWNlLCBJbnRSZWN0KDMwMCArIDAsIC0xLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgdGhpcy0+
bGVhdmVMYXllcihmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgLy8gVGhl
IGZpbHRlcmVkIGxheWVyL3JlcGxpY2EgZG9lcyBub3Qgb2NjbHVkZS4KKyAgICAgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNj
cmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gVGhl
IHN1cmZhY2UgaGFzIGEgYmFja2dyb3VuZCBibHVyLCBzbyBpdCBuZWVkcyBwaXhlbHMgdGhhdCBh
cmUgY3VycmVudGx5IGNvbnNpZGVyZWQgb2NjbHVkZWQgaW4gb3JkZXIgdG8gYmUgZHJhd24uIFNv
IHRoZSBwaXhlbHMKKyAgICAgICAgLy8gaXQgbmVlZHMgc2hvdWxkIGJlIHJlbW92ZWQgc29tZSB0
aGUgb2NjbHVkZWQgYXJlYSBzbyB0aGF0IHdoZW4gd2UgZ2V0IHRvIHRoZSBwYXJlbnQgdGhleSBh
cmUgZHJhd24uCisgICAgICAgIHRoaXMtPnZpc2l0Q29udHJpYnV0aW5nU3VyZmFjZShmaWx0ZXJl
ZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgdGhpcy0+ZW50ZXJMYXllcihwYXJlbnQs
IG9jY2x1c2lvbik7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAx
NTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1
MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKworICAgICAgICBJbnRSZWN0IG91dHNldFJlY3Q7CisgICAgICAgIElu
dFJlY3QgdGVzdFJlY3Q7CisKKyAgICAgICAgLy8gTm90aGluZyBpbiB0aGUgYmx1ciBvdXRzZXRz
IGZvciB0aGUgZmlsdGVyZWRTdXJmYWNlIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRSZWN0
ID0gSW50UmVjdCg1MCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNldExl
ZnQgKyBvdXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgICAg
ICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJl
Y3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOwor
CisgICAgICAgIC8vIFN0dWZmIG91dHNpZGUgdGhlIGJsdXIgb3V0c2V0cyBpcyBzdGlsbCBvY2Ns
dWRlZCB0aG91Z2guCisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVz
dFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0LCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAgICAg
ICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNl
dFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoLTEsIDApOworICAgICAgICB0ZXN0UmVjdC5l
eHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0
UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwgLTEpOworICAgICAg
ICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJl
Y3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOwor
CisgICAgICAgIC8vIE5vdGhpbmcgaW4gdGhlIGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRlcmVk
U3VyZmFjZSdzIHJlcGxpY2EgaXMgb2NjbHVkZWQuCisgICAgICAgIG91dHNldFJlY3QgPSBJbnRS
ZWN0KDIwMCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNldExlZnQgKyBv
dXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgICAgICB0ZXN0
UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworCisgICAg
ICAgIC8vIFN0dWZmIG91dHNpZGUgdGhlIGJsdXIgb3V0c2V0cyBpcyBzdGlsbCBvY2NsdWRlZCB0
aG91Z2guCisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3Qu
ZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0LCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVz
dFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAg
ICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7
CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoLTEsIDApOworICAgICAgICB0ZXN0UmVjdC5leHBhbmQo
MSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9
IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwgLTEpOworICAgICAgICB0ZXN0
UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgIH0K
K307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0
RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyKTsKKwordGVtcGxhdGU8
Y2xhc3MgVHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3MgQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UgOiBwdWJsaWMgQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdDxUeXBlcywgb3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBydW5NeVRlc3QoKQorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c2NhbGVCeUhhbGY7CisgICAgICAgIHNjYWxlQnlIYWxmLnNjYWxlKDAuNSk7CisKKyAgICAgICAg
Ly8gTWFrZXMgdHdvIHN1cmZhY2VzIHRoYXQgY29tcGxldGVseSBjb3ZlciB8cGFyZW50fC4gVGhl
IG9jY2x1c2lvbiBib3RoIGFib3ZlIGFuZCBiZWxvdyB0aGUgZmlsdGVycyB3aWxsIGJlIHJlZHVj
ZWQgYnkgZWFjaCBvZiB0aGVtLgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExheWVy
VHlwZSogcm9vdCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoNzUsIDc1KSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpM
YXllclR5cGUqIHBhcmVudCA9IHRoaXMtPmNyZWF0ZVN1cmZhY2Uocm9vdCwgc2NhbGVCeUhhbGYs
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTUwLCAxNTApKTsKKyAgICAgICAgcGFyZW50LT5z
ZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBl
KiBmaWx0ZXJlZFN1cmZhY2UxID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgc2Nh
bGVCeUhhbGYsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7Cisg
ICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZTIgPSB0aGlz
LT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCBzY2FsZUJ5SGFsZiwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6Okxh
eWVyVHlwZSogb2NjbHVkaW5nTGF5ZXJBYm92ZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihw
YXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDEwMCwgMTAwKSwgSW50U2l6
ZSg1MCwgNTApLCB0cnVlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVycyBv
d24gc3VyZmFjZXMuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAg
ZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShM
ZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICAg
ICAgZmlsdGVyZWRTdXJmYWNlMS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisgICAg
ICAgIGZpbHRlcmVkU3VyZmFjZTItPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisg
ICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9mIGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZm
ZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBv
dXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRS
aWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJh
d0V0Yyhyb290KTsKKworICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNzb3I8
dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZhY2VU
eXBlPiBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9jY2x1
c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisg
ICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXJBYm92ZSwgb2NjbHVzaW9uKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAgLyAyLCAxMDAgLyAyLCA1MCAvIDIs
IDUwIC8gMiksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCku
cmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMTAw
LCA1MCwgNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZh
Y2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihmaWx0ZXJl
ZFN1cmZhY2UyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGluZ1N1
cmZhY2UoZmlsdGVyZWRTdXJmYWNlMiwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRM
YXllcihmaWx0ZXJlZFN1cmZhY2UxLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENv
bnRyaWJ1dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlMSwgb2NjbHVzaW9uKTsKKworICAgICAg
ICBBU1NFUlRfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMo
KS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRh
cmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gVGVzdCBleHBlY3Rh
dGlvbnMgaW4gdGhlIHRhcmdldC4KKyAgICAgICAgSW50UmVjdCBleHBlY3RlZE9jY2x1c2lvbiA9
IEludFJlY3QoMTAwICsgb3V0c2V0UmlnaHQgKiAyLCAxMDAgKyBvdXRzZXRCb3R0b20gKiAyLCA1
MCAtIChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQpICogMiwgNTAgLSAob3V0c2V0VG9wICsgb3V0
c2V0Qm90dG9tKSAqIDIpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9jY2x1c2lv
biwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKClbMF0pOworCisg
ICAgICAgIC8vIFRlc3QgZXhwZWN0YXRpb25zIGluIHRoZSBzY3JlZW4uIFRha2UgdGhlIGNlaWxp
bmcgb2YgaGFsZiBvZiB0aGUgb3V0c2V0cy4KKyAgICAgICAgb3V0c2V0VG9wID0gKG91dHNldFRv
cCArIDEpIC8gMjsKKyAgICAgICAgb3V0c2V0UmlnaHQgPSAob3V0c2V0UmlnaHQgKyAxKSAvIDI7
CisgICAgICAgIG91dHNldEJvdHRvbSA9IChvdXRzZXRCb3R0b20gKyAxKSAvIDI7CisgICAgICAg
IG91dHNldExlZnQgPSAob3V0c2V0TGVmdCArIDEpIC8gMjsKKyAgICAgICAgZXhwZWN0ZWRPY2Ns
dXNpb24gPSBJbnRSZWN0KDEwMCAvIDIgKyBvdXRzZXRSaWdodCAqIDIsIDEwMCAvIDIgKyBvdXRz
ZXRCb3R0b20gKiAyLCA1MCAvIDIgLSAob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0KSAqIDIsIDUw
IC8yIC0gKG91dHNldFRvcCArIG91dHNldEJvdHRvbSkgKiAyKTsKKworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChleHBlY3RlZE9jY2x1c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3Bh
Y2UoKS5yZWN0cygpWzBdKTsKKyAgICB9Cit9OworCitBTExfQ0NPQ0NMVVNJT05UUkFDS0VSX1RF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVz
aW9uVHdpY2UpOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+Citj
bGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNr
Z3JvdW5kRmlsdGVyV2l0aENsaXAgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBl
cywgb3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3QoKQorICAg
IHsKKyAgICAgICAgLy8gTWFrZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUweDUw
LCB0aGF0IGFyZSBjb21wbGV0ZWx5IHN1cnJvdW5kZWQgYnkgb3BhcXVlIGxheWVycyB3aGljaCBh
cmUgYWJvdmUgdGhlbSBpbiB0aGUgei1vcmRlci4KKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkNv
bnRlbnRMYXllclR5cGUqIHBhcmVudCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAxNTApKTsKKyAgICAgICAgLy8g
V2Ugc3RpY2sgdGhlIGZpbHRlcmVkIHN1cmZhY2UgaW5zaWRlIGEgY2xpcHBpbmcgc3VyZmFjZSBz
byB0aGF0IHdlIGNhbiBtYWtlIHN1cmUgdGhlIGNsaXAgaXMgaG9ub3JlZCB3aGVuIGV4cG9zaW5n
IHBpeGVscyBmb3IKKyAgICAgICAgLy8gdGhlIGJhY2tncm91bmQgZmlsdGVyLgorICAgICAgICB0
eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBjbGlwcGluZ1N1cmZhY2UgPSB0aGlzLT5jcmVhdGVT
dXJmYWNlKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMzAwLCA3MCkpOworICAgICAgICBjbGlwcGluZ1N1cmZhY2UtPnNldE1hc2tzVG9Cb3Vu
ZHModHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3Vy
ZmFjZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihjbGlwcGluZ1N1cmZhY2UsIHRoaXMtPmlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDUwLCA1MCksIEludFNpemUoNTAsIDUwKSwgZmFsc2Up
OworICAgICAgICB0aGlzLT5jcmVhdGVSZXBsaWNhTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCB0aGlz
LT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgxNTAsIDApLCBJbnRTaXplKCkpOworICAgICAg
ICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjEgPSB0aGlzLT5jcmVh
dGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgzMDAsIDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpM
YXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMiA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJl
bnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDEwMCksIEludFNpemUoMzAw
LCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRp
bmdMYXllcjMgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCA1MCksIEludFNpemUoNTAsIDUwKSwgdHJ1ZSk7CisgICAg
ICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyNCA9IHRoaXMtPmNy
ZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDEwMCwgNTApLCBJbnRTaXplKDEwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlw
ZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI1ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVy
KHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMjUwLCA1MCksIEludFNp
emUoNTAsIDUwKSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRmlsdGVycyBtYWtlIHRoZSBsYXllciBv
d24gYSBzdXJmYWNlLiBUaGlzIGZpbHRlciBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBnb2VzIG91
dHNpZGUgdGhlIGJvdHRvbSBvZiB0aGUgY2xpcHBpbmdTdXJmYWNlLgorICAgICAgICBGaWx0ZXJP
cGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChC
bHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEyLCBXZWJDb3JlOjpGaXhlZCksIEZp
bHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBmaWx0ZXJlZFN1cmZhY2UtPnNldEJhY2tn
cm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9m
IGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZmZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBv
dXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdl
dE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0
KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXJXaXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0
eXBlbmFtZSBUeXBlczo6UmVuZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAs
IDEwMDAsIDEwMDApKTsKKyAgICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAgICAgICAgLy8gVGhlc2UgbGF5ZXJzIG9jY2x1
ZGUgcGl4ZWxzIGRpcmVjdGx5IGJlc2lkZSB0aGUgZmlsdGVyZWRTdXJmYWNlLiBCZWNhdXNlIGZp
bHRlcmVkIHN1cmZhY2UgYmxlbmRzIHBpeGVscyBpbiBhIHJhZGl1cywgaXQgd2lsbAorICAgICAg
ICAvLyBuZWVkIHRvIHNlZSBzb21lIG9mIHRoZSBwaXhlbHMgKHVwIHRvIHJhZGl1cyBmYXIpIHVu
ZGVybmVhdGggdGhlIG9jY2x1ZGluZ0xheWVycy4KKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihv
Y2NsdWRpbmdMYXllcjUsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2Nj
bHVkaW5nTGF5ZXI0LCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKG9jY2x1
ZGluZ0xheWVyMywgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2NsdWRp
bmdMYXllcjIsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5n
TGF5ZXIxLCBvY2NsdXNpb24pOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwg
MCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFj
ZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAw
LCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMo
KSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3Vy
ZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBFdmVyeXRoaW5nIG91dHNpZGUg
dGhlIHN1cmZhY2UvcmVwbGljYSBpcyBvY2NsdWRlZCBidXQgdGhlIHN1cmZhY2UvcmVwbGljYSBp
dHNlbGYgaXMgbm90LgorICAgICAgICB0aGlzLT5lbnRlckxheWVyKGZpbHRlcmVkU3VyZmFjZSwg
b2NjbHVzaW9uKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxLCAwLCA0OSwgNTAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVj
dCgxLCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMSwg
NTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2Us
IEludFJlY3QoMCwgMSwgNTAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRT
dXJmYWNlLCBJbnRSZWN0KC0xLCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMCwgMCwgNTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChm
aWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgLTEsIDUwLCA1MCkpKTsKKworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDE1MCArIDEsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDEsIDAsIDUwLCA1
MCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxNTAgKyAwLCAxLCA1MCwgNDkp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVj
dCgxNTAgKyAwLCAxLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MTUwICsgMCwgMCwgNDksIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0
ZXJlZFN1cmZhY2UsIEludFJlY3QoMTUwIC0gMSwgMCwgNTAsIDUwKSkpOworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDE1MCArIDAsIDAsIDUwLCA0OSksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDAsIC0xLCA1MCwg
NTApKSk7CisgICAgICAgIHRoaXMtPmxlYXZlTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNp
b24pOworCisgICAgICAgIC8vIFRoZSBmaWx0ZXJlZCBsYXllci9yZXBsaWNhIGRvZXMgbm90IG9j
Y2x1ZGUuCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXpl
KCkpOworCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwgc28g
aXQgbmVlZHMgcGl4ZWxzIHRoYXQgYXJlIGN1cnJlbnRseSBjb25zaWRlcmVkIG9jY2x1ZGVkIGlu
IG9yZGVyIHRvIGJlIGRyYXduLiBTbyB0aGUgcGl4ZWxzCisgICAgICAgIC8vIGl0IG5lZWRzIHNo
b3VsZCBiZSByZW1vdmVkIHNvbWUgdGhlIG9jY2x1ZGVkIGFyZWEgc28gdGhhdCB3aGVuIHdlIGdl
dCB0byB0aGUgcGFyZW50IHRoZXkgYXJlIGRyYXduLgorICAgICAgICB0aGlzLT52aXNpdENvbnRy
aWJ1dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAgIHRo
aXMtPmVudGVyQ29udHJpYnV0aW5nU3VyZmFjZShjbGlwcGluZ1N1cmZhY2UsIG9jY2x1c2lvbik7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsK
KworICAgICAgICBJbnRSZWN0IG91dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgY2xpcHBlZE91
dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgdGVzdFJlY3Q7CisKKyAgICAgICAgLy8gTm90aGlu
ZyBpbiB0aGUgKGNsaXBwZWQpIGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRlcmVkU3VyZmFjZSBp
cyBvY2NsdWRlZC4KKyAgICAgICAgb3V0c2V0UmVjdCA9IEludFJlY3QoNTAgLSBvdXRzZXRMZWZ0
LCA1MCAtIG91dHNldFRvcCwgNTAgKyBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0
c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICAgICAgY2xpcHBlZE91dHNldFJlY3QgPSBpbnRl
cnNlY3Rpb24ob3V0c2V0UmVjdCwgSW50UmVjdCgwIC0gb3V0c2V0TGVmdCwgMCAtIG91dHNldFRv
cCwgMzAwICsgb3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCA3MCArIG91dHNldFRvcCArIG91dHNl
dEJvdHRvbSkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBTdHVmZiBvdXRz
aWRlIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRzIGlzIHN0aWxsIG9jY2x1ZGVkIHRob3VnaC4K
KyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQo
MSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAg
ICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwg
MSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAg
ICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsK
KyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChj
bGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGlu
Z1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAg
ICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAx
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOworCisgICAg
ICAgIC8vIE5vdGhpbmcgaW4gdGhlIChjbGlwcGVkKSBibHVyIG91dHNldHMgZm9yIHRoZSBmaWx0
ZXJlZFN1cmZhY2UncyByZXBsaWNhIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRSZWN0ID0g
SW50UmVjdCgyMDAgLSBvdXRzZXRMZWZ0LCA1MCAtIG91dHNldFRvcCwgNTAgKyBvdXRzZXRMZWZ0
ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICAgICAg
Y2xpcHBlZE91dHNldFJlY3QgPSBpbnRlcnNlY3Rpb24ob3V0c2V0UmVjdCwgSW50UmVjdCgwIC0g
b3V0c2V0TGVmdCwgMCAtIG91dHNldFRvcCwgMzAwICsgb3V0c2V0TGVmdCArIG91dHNldFJpZ2h0
LCA3MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSkpOworICAgICAgICB0ZXN0UmVjdCA9IG91
dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsK
KworICAgICAgICAvLyBTdHVmZiBvdXRzaWRlIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRzIGlz
IHN0aWxsIG9jY2x1ZGVkIHRob3VnaC4KKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0Owor
ICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNs
aXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5n
U3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAg
ICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBw
ZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3Vy
ZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAg
ICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOwor
ICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRl
c3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAg
ICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBl
ZE91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJm
YWNlLCB0ZXN0UmVjdCkpOworICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3Jv
dW5kRmlsdGVyV2l0aENsaXApOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVM
YXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lvbkJl
bG93QmFja2dyb3VuZEZpbHRlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0PFR5cGVz
LCBvcGFxdWVMYXllcnM+IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHJ1bk15VGVzdCgpCisgICAg
eworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZUJ5SGFsZjsKKyAgICAgICAgc2Nh
bGVCeUhhbGYuc2NhbGUoMC41KTsKKworICAgICAgICAvLyBNYWtlIGEgc3VyZmFjZSBhbmQgaXRz
IHJlcGxpY2EsIGVhY2ggNTB4NTAsIHRoYXQgYXJlIGNvbXBsZXRlbHkgc3Vycm91bmRlZCBieSBv
cGFxdWUgbGF5ZXJzIHdoaWNoIGFyZSBhYm92ZSB0aGVtIGluIHRoZSB6LW9yZGVyLgorICAgICAg
ICAvLyBUaGUgc3VyZmFjZSBpcyBzY2FsZWQgdG8gdGVzdCB0aGF0IHRoZSBwaXhlbCBtb3Zpbmcg
aXMgZG9uZSBpbiB0aGUgdGFyZ2V0IHNwYWNlLCB3aGVyZSB0aGUgYmFja2dyb3VuZCBmaWx0ZXIg
aXMgYXBwbGllZCwgYnV0IHRoZSBzdXJmYWNlCisgICAgICAgIC8vIGFwcGVhcnMgYXQgNTAsIDUw
IGFuZCB0aGUgcmVwbGljYSBhdCAyMDAsIDUwLgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29u
dGVudExheWVyVHlwZSogcGFyZW50ID0gdGhpcy0+Y3JlYXRlUm9vdCh0aGlzLT5pZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDE1MCkpOworICAgICAgICB0eXBl
bmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZWhpbmRTdXJmYWNlTGF5ZXIgPSB0aGlzLT5jcmVhdGVE
cmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCg2MCwg
NjApLCBJbnRTaXplKDMwLCAzMCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5
ZXJUeXBlKiBiZWhpbmRSZXBsaWNhTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFy
ZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyMTAsIDYwKSwgSW50U2l6ZSgz
MCwgMzApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogZmlsdGVy
ZWRTdXJmYWNlID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgc2NhbGVCeUhhbGYs
IEZsb2F0UG9pbnQoNTAsIDUwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAgICAgICAg
dGhpcy0+Y3JlYXRlUmVwbGljYUxheWVyKGZpbHRlcmVkU3VyZmFjZSwgdGhpcy0+aWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMzAwLCAwKSwgSW50U2l6ZSgpKTsKKworICAgICAgICAvLyBGaWx0
ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlv
bnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVy
YXRpb246OkJMVVIpKTsKKyAgICAgICAgZmlsdGVyZWRTdXJmYWNlLT5zZXRCYWNrZ3JvdW5kRmls
dGVycyhmaWx0ZXJzKTsKKworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisg
ICAgICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXJXaXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6
TGF5ZXJUeXBlLCB0eXBlbmFtZSBUeXBlczo6UmVuZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJ
bnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Np
c3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAgICAgICAgLy8gVGhlIHN1
cmZhY2UgaGFzIGEgYmFja2dyb3VuZCBibHVyLCBzbyBpdCBibHVycyBub24tb3BhcXVlIHBpeGVs
cyBiZWxvdyBpdC4KKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihmaWx0ZXJlZFN1cmZhY2UsIG9j
Y2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0Q29udHJpYnV0aW5nU3VyZmFjZShmaWx0ZXJl
ZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihiZWhpbmRS
ZXBsaWNhTGF5ZXIsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIoYmVoaW5k
U3VyZmFjZUxheWVyLCBvY2NsdXNpb24pOworCisgICAgICAgIC8vIFRoZSBsYXllcnMgYmVoaW5k
IHRoZSBzdXJmYWNlIGFyZSBub3QgYmx1cnJlZCwgYW5kIHRoZWlyIG9jY2x1c2lvbiBkb2VzIG5v
dCBjaGFuZ2UsIHVudGlsIHdlIGxlYXZlIHRoZSBzdXJmYWNlLgorICAgICAgICAvLyBTbyBpdCBz
aG91bGQgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBmaWx0ZXIgaGVyZS4KKyAgICAgICAgSW50UmVj
dCBvY2NsdXNpb25CZWhpbmRTdXJmYWNlID0gSW50UmVjdCg2MCwgNjAsIDMwLCAzMCk7CisgICAg
ICAgIEludFJlY3Qgb2NjbHVzaW9uQmVoaW5kUmVwbGljYSA9IEludFJlY3QoMjEwLCA2MCwgMzAs
IDMwKTsKKworICAgICAgICBJbnRSZWN0IGV4cGVjdGVkT3BhcXVlQm91bmRzID0gdW5pb25SZWN0
KG9jY2x1c2lvbkJlaGluZFN1cmZhY2UsIG9jY2x1c2lvbkJlaGluZFJlcGxpY2EpOworICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9wYXF1ZUJvdW5kcywgb2NjbHVzaW9uLm9jY2x1c2lv
bkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgb2NjbHVz
aW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKGV4cGVjdGVkT3BhcXVlQm91bmRzLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5U
YXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lv
bi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgfQorfTsK
KworQUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250
UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVyKTsKKwordGVtcGxhdGU8Y2xhc3Mg
VHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyVGVzdERv
bnRSZWR1Y2VPY2NsdXNpb25JZkJhY2tncm91bmRGaWx0ZXJJc09jY2x1ZGVkIDogcHVibGljIEND
T2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9wYXF1ZUxheWVycz4geworcHJvdGVjdGVkOgor
ICAgIHZvaWQgcnVuTXlUZXN0KCkKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHNjYWxlQnlIYWxmOworICAgICAgICBzY2FsZUJ5SGFsZi5zY2FsZSgwLjUpOworCisgICAgICAg
IC8vIE1ha2UgYSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYSwgZWFjaCA1MHg1MCwgdGhhdCBhcmUg
Y29tcGxldGVseSBzdXJyb3VuZGVkIGJ5IG9wYXF1ZSBsYXllcnMgd2hpY2ggYXJlIGFib3ZlIHRo
ZW0gaW4gdGhlIHotb3JkZXIuCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGlzIHNjYWxlZCB0byB0
ZXN0IHRoYXQgdGhlIHBpeGVsIG1vdmluZyBpcyBkb25lIGluIHRoZSB0YXJnZXQgc3BhY2UsIHdo
ZXJlIHRoZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBhcHBsaWVkLCBidXQgdGhlIHN1cmZhY2UKKyAg
ICAgICAgLy8gYXBwZWFycyBhdCA1MCwgNTAgYW5kIHRoZSByZXBsaWNhIGF0IDIwMCwgNTAuCisg
ICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5j
cmVhdGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDMwMCwgMTUwKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVk
U3VyZmFjZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHNjYWxlQnlIYWxmLCBG
bG9hdFBvaW50KDUwLCA1MCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgICAgIHRo
aXMtPmNyZWF0ZVJlcGxpY2FMYXllcihmaWx0ZXJlZFN1cmZhY2UsIHRoaXMtPmlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDMwMCwgMCksIEludFNpemUoKSk7CisgICAgICAgIHR5cGVuYW1lIFR5
cGVzOjpMYXllclR5cGUqIGFib3ZlU3VyZmFjZUxheWVyID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xh
eWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoNTAsIDUwKSwgSW50
U2l6ZSg1MCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSog
YWJvdmVSZXBsaWNhTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlz
LT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyMDAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0
cnVlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1cmZhY2Uu
CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVy
YXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMywgV2Vi
Q29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICAgICAgZmlsdGVyZWRT
dXJmYWNlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKworICAgICAgICB0aGlzLT5j
YWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXJXaXRo
U2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0eXBlbmFtZSBUeXBlczo6UmVuZGVy
U3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICAg
ICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAw
KSk7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihhYm92ZVJlcGxpY2FMYXllciwgb2NjbHVz
aW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihhYm92ZVN1cmZhY2VMYXllciwgb2NjbHVz
aW9uKTsKKworICAgICAgICAvLyBUaGUgc3VyZmFjZSBoYXMgYSBiYWNrZ3JvdW5kIGJsdXIsIHNv
IGl0IGJsdXJzIG5vbi1vcGFxdWUgcGl4ZWxzIGJlbG93IGl0LgorICAgICAgICB0aGlzLT52aXNp
dExheWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRD
b250cmlidXRpbmdTdXJmYWNlKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKworICAgICAg
ICAvLyBUaGUgZmlsdGVyIGlzIGNvbXBsZXRlbHkgb2NjbHVkZWQsIHNvIGl0IHNob3VsZCBub3Qg
Ymx1ciBhbnl0aGluZyBhbmQgcmVkdWNlIGFueSBvY2NsdXNpb24uCisgICAgICAgIEludFJlY3Qg
b2NjbHVzaW9uQWJvdmVTdXJmYWNlID0gSW50UmVjdCg1MCwgNTAsIDUwLCA1MCk7CisgICAgICAg
IEludFJlY3Qgb2NjbHVzaW9uQWJvdmVSZXBsaWNhID0gSW50UmVjdCgyMDAsIDUwLCA1MCwgNTAp
OworCisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRPcGFxdWVCb3VuZHMgPSB1bmlvblJlY3Qob2Nj
bHVzaW9uQWJvdmVTdXJmYWNlLCBvY2NsdXNpb25BYm92ZVJlcGxpY2EpOworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChleHBlY3RlZE9wYXF1ZUJvdW5kcywgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2Ny
ZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9j
Y2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UV9SRUNUKGV4cGVjdGVkT3BhcXVlQm91bmRzLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMnUsIG9jY2x1c2lvbi5vY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisgICAgfQorfTsKKworQUxM
X0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250UmVkdWNl
T2NjbHVzaW9uSWZCYWNrZ3JvdW5kRmlsdGVySXNPY2NsdWRlZCk7CisKK3RlbXBsYXRlPGNsYXNz
IFR5cGVzLCBib29sIG9wYXF1ZUxheWVycz4KK2NsYXNzIENDT2NjbHVzaW9uVHJhY2tlclRlc3RS
ZWR1Y2VPY2NsdXNpb25XaGVuQmFja2dyb3VuZEZpbHRlcklzUGFydGlhbGx5T2NjbHVkZWQgOiBw
dWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBlcywgb3BhcXVlTGF5ZXJzPiB7Citwcm90
ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3QoKQorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggc2NhbGVCeUhhbGY7CisgICAgICAgIHNjYWxlQnlIYWxmLnNjYWxlKDAuNSk7CisK
KyAgICAgICAgLy8gTWFrZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUweDUwLCB0
aGF0IGFyZSBjb21wbGV0ZWx5IHN1cnJvdW5kZWQgYnkgb3BhcXVlIGxheWVycyB3aGljaCBhcmUg
YWJvdmUgdGhlbSBpbiB0aGUgei1vcmRlci4KKyAgICAgICAgLy8gVGhlIHN1cmZhY2UgaXMgc2Nh
bGVkIHRvIHRlc3QgdGhhdCB0aGUgcGl4ZWwgbW92aW5nIGlzIGRvbmUgaW4gdGhlIHRhcmdldCBz
cGFjZSwgd2hlcmUgdGhlIGJhY2tncm91bmQgZmlsdGVyIGlzIGFwcGxpZWQsIGJ1dCB0aGUgc3Vy
ZmFjZQorICAgICAgICAvLyBhcHBlYXJzIGF0IDUwLCA1MCBhbmQgdGhlIHJlcGxpY2EgYXQgMjAw
LCA1MC4KKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkNvbnRlbnRMYXllclR5cGUqIHBhcmVudCA9
IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoMzAwLCAxNTApKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSog
ZmlsdGVyZWRTdXJmYWNlID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgc2NhbGVC
eUhhbGYsIEZsb2F0UG9pbnQoNTAsIDUwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKKyAg
ICAgICAgdGhpcy0+Y3JlYXRlUmVwbGljYUxheWVyKGZpbHRlcmVkU3VyZmFjZSwgdGhpcy0+aWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMzAwLCAwKSwgSW50U2l6ZSgpKTsKKyAgICAgICAgdHlw
ZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogYWJvdmVTdXJmYWNlTGF5ZXIgPSB0aGlzLT5jcmVhdGVE
cmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCg3MCwg
NTApLCBJbnRTaXplKDMwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5
ZXJUeXBlKiBhYm92ZVJlcGxpY2FMYXllciA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJl
bnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDIwMCwgNTApLCBJbnRTaXplKDMw
LCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZXNpZGVT
dXJmYWNlTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCg5MCwgNDApLCBJbnRTaXplKDEwLCAxMCksIHRydWUpOwor
ICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZXNpZGVSZXBsaWNhTGF5ZXIgPSB0
aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgyMDAsIDQwKSwgSW50U2l6ZSgxMCwgMTApLCB0cnVlKTsKKworICAgICAgICAvLyBG
aWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJh
dGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJP
cGVyYXRpb246OkJMVVIpKTsKKyAgICAgICAgZmlsdGVyZWRTdXJmYWNlLT5zZXRCYWNrZ3JvdW5k
RmlsdGVycyhmaWx0ZXJzKTsKKworICAgICAgICAvLyBTYXZlIHRoZSBkaXN0YW5jZSBvZiBpbmZs
dWVuY2UgZm9yIHRoZSBibHVyIGVmZmVjdC4KKyAgICAgICAgaW50IG91dHNldFRvcCwgb3V0c2V0
UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdDsKKyAgICAgICAgZmlsdGVycy5nZXRPdXRz
ZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisK
KyAgICAgICAgdGhpcy0+Y2FsY0RyYXdFdGMocGFyZW50KTsKKworICAgICAgICBUZXN0Q0NPY2Ns
dXNpb25UcmFja2VyV2l0aFNjaXNzb3I8dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5h
bWUgVHlwZXM6OlJlbmRlclN1cmZhY2VUeXBlPiBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAw
LCAxMDAwKSk7CisgICAgICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3Qo
MCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIoYmVzaWRlUmVw
bGljYUxheWVyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKGJlc2lkZVN1
cmZhY2VMYXllciwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihhYm92ZVJl
cGxpY2FMYXllciwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihhYm92ZVN1
cmZhY2VMYXllciwgb2NjbHVzaW9uKTsKKworICAgICAgICAvLyBUaGUgc3VyZmFjZSBoYXMgYSBi
YWNrZ3JvdW5kIGJsdXIsIHNvIGl0IGJsdXJzIG5vbi1vcGFxdWUgcGl4ZWxzIGJlbG93IGl0Lgor
ICAgICAgICB0aGlzLT52aXNpdExheWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKyAg
ICAgICAgdGhpcy0+dmlzaXRDb250cmlidXRpbmdTdXJmYWNlKGZpbHRlcmVkU3VyZmFjZSwgb2Nj
bHVzaW9uKTsKKworICAgICAgICAvLyBUaGUgZmlsdGVyIGluIHRoZSBzdXJmYWNlIGFuZCByZXBs
aWNhIGFyZSBwYXJ0aWFsbHkgdW5vY2NsdWRlZC4gT25seSB0aGUgdW5vY2NsdWRlZCBwYXJ0cyBz
aG91bGQgcmVkdWNlIG9jY2x1c2lvbi4KKyAgICAgICAgLy8gVGhpcyBtZWFucyBpdCB3aWxsIHB1
c2ggYmFjayB0aGUgb2NjbHVzaW9uIHRoYXQgdG91Y2hlcyB0aGUgdW5vY2NsdWRlZCBwYXJ0IChv
Y2NsdXNpb25BYm92ZV9fXyksIGJ1dCBpdCB3aWxsIG5vdAorICAgICAgICAvLyB0b3VjaCBvY2Ns
dXNpb25CZXNpZGVfX19fIHNpbmNlIHRoYXQgaXMgbm90IGJlc2lkZSB0aGUgdW5vY2NsdWRlZCBw
YXJ0IG9mIHRoZSBzdXJmYWNlLCBldmVuIHRob3VnaCBpdCBpcyBiZXNpZGUKKyAgICAgICAgLy8g
dGhlIG9jY2x1ZGVkIHBhcnQgb2YgdGhlIHN1cmZhY2UuCisgICAgICAgIEludFJlY3Qgb2NjbHVz
aW9uQWJvdmVTdXJmYWNlID0gSW50UmVjdCg3MCArIG91dHNldFJpZ2h0LCA1MCwgMzAgLSBvdXRz
ZXRSaWdodCwgNTApOworICAgICAgICBJbnRSZWN0IG9jY2x1c2lvbkFib3ZlUmVwbGljYSA9IElu
dFJlY3QoMjAwLCA1MCwgMzAgLSBvdXRzZXRMZWZ0LCA1MCk7CisgICAgICAgIEludFJlY3Qgb2Nj
bHVzaW9uQmVzaWRlU3VyZmFjZSA9IEludFJlY3QoOTAsIDQwLCAxMCwgMTApOworICAgICAgICBJ
bnRSZWN0IG9jY2x1c2lvbkJlc2lkZVJlcGxpY2EgPSBJbnRSZWN0KDIwMCwgNDAsIDEwLCAxMCk7
CisKKyAgICAgICAgSW50UmVjdCBleHBlY3RlZE9wYXF1ZUJvdW5kcyA9IHVuaW9uUmVjdChvY2Ns
dXNpb25BYm92ZVN1cmZhY2UsIG9jY2x1c2lvbkFib3ZlUmVwbGljYSk7CisgICAgICAgIGV4cGVj
dGVkT3BhcXVlQm91bmRzLnVuaXRlKHVuaW9uUmVjdChvY2NsdXNpb25CZXNpZGVTdXJmYWNlLCBv
Y2NsdXNpb25CZXNpZGVSZXBsaWNhKSk7CisKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0
ZWRPcGFxdWVCb3VuZHMsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGV4cGVjdGVkT3BhcXVlQm91bmRzLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKworICAgICAgICBWZWN0
b3I8SW50UmVjdD4gc2NyZWVuUmVjdHMgPSBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFj
ZSgpLnJlY3RzKCk7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiB0YXJnZXRSZWN0cyA9IG9jY2x1
c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpOworCisgICAgICAgIEFTU0VS
VF9FUSg0dSwgc2NyZWVuUmVjdHMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDR1LCB0YXJn
ZXRSZWN0cy5zaXplKCkpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG9jY2x1c2lvbkJlc2lk
ZVN1cmZhY2UsIHRhcmdldFJlY3RzWzBdKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob2NjbHVz
aW9uQmVzaWRlU3VyZmFjZSwgc2NyZWVuUmVjdHNbMF0pOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChvY2NsdXNpb25CZXNpZGVSZXBsaWNhLCB0YXJnZXRSZWN0c1sxXSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKG9jY2x1c2lvbkJlc2lkZVJlcGxpY2EsIHNjcmVlblJlY3RzWzFdKTsKKyAgICAg
ICAgRVhQRUNUX0VRX1JFQ1Qob2NjbHVzaW9uQWJvdmVTdXJmYWNlLCB0YXJnZXRSZWN0c1syXSk7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG9jY2x1c2lvbkFib3ZlU3VyZmFjZSwgc2NyZWVuUmVj
dHNbMl0pOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvY2NsdXNpb25BYm92ZVJlcGxpY2EsIHRh
cmdldFJlY3RzWzNdKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1Qob2NjbHVzaW9uQWJvdmVSZXBs
aWNhLCBzY3JlZW5SZWN0c1szXSk7CisgICAgfQorfTsKKworQUxMX0NDT0NDTFVTSU9OVFJBQ0tF
Ul9URVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3RSZWR1Y2VPY2NsdXNpb25XaGVuQmFja2dyb3Vu
ZEZpbHRlcklzUGFydGlhbGx5T2NjbHVkZWQpOworCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139930</attachid>
            <date>2012-05-02 18:10:39 -0700</date>
            <delta_ts>2012-05-02 19:41:50 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-84317-20120502211037.patch</filename>
            <type>text/plain</type>
            <size>59822</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1ODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4MDUwNjkzYzUzN2Zj
MTU0ZDcxMzViMGIwZjYxNzkxM2JkOGRkZTkzLi4wM2RiZTUyMGRmOWNjYjk1OTE3NzFiYTBjNjA3
YzQ1NjI0NzE5ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNS0wMiAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVkZWQgZm9yIGEg
YmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxr
ZXIuCisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmg6CisK
IDIwMTItMDUtMDEgIEdhdmluIFBldGVycyAgPGdhdmlucEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBGaXggV2ViUHJlcmVuZGVyOjpyZWZlcnJlcigpIHRodW5rLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGQ4MmM0M2Q1NGE5MTRiNzI2YjcyYjIxZDZlYWI5ZGU4NjU5NTk5YjQuLjc5ZTk4OTdl
NjRkYzg4Y2QzYWQ4YTBjNGYyZjE5ZDRjNTUzODcyMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OCBAQAorMjAxMi0wNS0wMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0
IGFyZSBuZWVkZWQgZm9yIGEgYmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBBZHJpZW5uZSBXYWxrZXIuCisKKyAgICAgICAgQmx1ciBmaWx0ZXJzIG1vdmUgcGl4ZWxz
IGFyb3VuZCwgc28gYSBwaXhlbCBjYW4gaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZgorICAgICAgICBw
aXhlbHMgYXQgc29tZSBkaXN0YW5jZSBhd2F5LiBJZiBhIHBpeGVsIGlzIG5vdCBvY2NsdWRlZCwg
dGhlbiBhbGwKKyAgICAgICAgcGl4ZWxzIHdpdGhpbiB0aGUgcmFkaXVzIG9mIHRoZSBibHVyIG1h
eSBpbmZsdWVuY2UgdGhlIHZhbHVlIG9mIHRoYXQKKyAgICAgICAgcGl4ZWwsIHNvIHRoZXkgc2hv
dWxkIGFsc28gc3RheSB1bm9jY2x1ZGVkLgorCisgICAgICAgIEZvciBiYWNrZ3JvdW5kIGZpbHRl
cnMsIHRoZSBwaXhlbHMgYXJlIHJlYWQgZnJvbSB0aGUgZmlsdGVyJ3MgdGFyZ2V0CisgICAgICAg
IHN1cmZhY2UsIHNvIHdlIHJlbW92ZSBvY2NsdXNpb24gZnJvbSB0aGF0IHRhcmdldCBzdXJmYWNl
IGZyb20gcGl4ZWxzCisgICAgICAgIHRoYXQgd2lsbCBibHVyIGludG8gdmlzaWJsZSBwaXhlbHMu
CisKKyAgICAgICAgVW5pdCB0ZXN0OiBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQ
aXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyCisgICAgICAgICAgICAgICAgICAgQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UK
KyAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhl
bHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyV2l0aENsaXAKKyAgICAgICAgICAgICAgICAgICBD
Q09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lvbkJlbG93QmFja2dyb3VuZEZp
bHRlcgorICAgICAgICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250UmVkdWNl
T2NjbHVzaW9uSWZCYWNrZ3JvdW5kRmlsdGVySXNPY2NsdWRlZAorICAgICAgICAgICAgICAgICAg
IENDT2NjbHVzaW9uVHJhY2tlclRlc3RSZWR1Y2VPY2NsdXNpb25XaGVuQmFja2dyb3VuZEZpbHRl
cklzUGFydGlhbGx5T2NjbHVkZWQKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VP
Y2NsdXNpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VP
Y2NsdXNpb25CZWxvd1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6OjpsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjo6OnVub2NjbHVkZWRDb250cmlidXRp
bmdTdXJmYWNlQ29udGVudFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oOgorICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2Vy
QmFzZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3Vs
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUXVhZEN1bGxlcjo6YXBwZW5kU3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1F1YWRDdWxsZXI6OmFwcGVuZFJlcGxpY2EpOgorCiAyMDEy
LTA1LTAyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3Zl
IHRpdGxlIGFuZCBtZWRpYSBxdWVyaWVzIGZyb20gU3R5bGVTaGVldEludGVybmFsIHRvIENTU1N0
eWxlU2hlZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTI0ZmIwOGE0NzBmMTBmNzY2
ZjkwZTFhMzg3ODZmN2M0Yzc3ZDgxOS4uY2Y1Zjc1M2VmNTRiYjlmNjcwOGE4MWNhZjIzNTU3N2M2
NzQ0MWFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAx
Mi0wNS0wMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Y2hyb21pdW1dIERvbid0IG9jY2x1ZGUgcGl4ZWxzIGluIGEgc3VyZmFjZSB0aGF0IGFyZSBuZWVk
ZWQgZm9yIGEgYmFja2dyb3VuZCBmaWx0ZXIgYmx1cgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJp
ZW5uZSBXYWxrZXIuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNw
cDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0T3ZlcmxhcHBp
bmdTdXJmYWNlU2libGluZ3M6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NP
Y2NsdXNpb25UcmFja2VyVGVzdE92ZXJsYXBwaW5nU3VyZmFjZVNpYmxpbmdzV2l0aFR3b1RyYW5z
Zm9ybXM6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFj
a2VyVGVzdEFuaW1hdGlvbk9wYWNpdHkxT25NYWluVGhyZWFkOjpydW5NeVRlc3QpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RBbmltYXRpb25PcGFjaXR5ME9u
TWFpblRocmVhZDo6cnVuTXlUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1c2lv
blRyYWNrZXJUZXN0QW5pbWF0aW9uVHJhbnNsYXRlT25NYWluVGhyZWFkOjpydW5NeVRlc3QpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RSZXBsaWNhT2NjbHVk
ZWQ6OnJ1bk15VGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2Vy
VGVzdFN1cmZhY2VXaXRoUmVwbGljYVVub2NjbHVkZWQ6OnJ1bk15VGVzdCk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdFN1cmZhY2VBbmRSZXBsaWNhT2NjbHVk
ZWREaWZmZXJlbnRseTo6cnVuTXlUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ09jY2x1
c2lvblRyYWNrZXJUZXN0U3VyZmFjZUNoaWxkT2ZTdXJmYWNlOjpydW5NeVRlc3QpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RTdXJmYWNlQ2hpbGRPZkNsaXBw
aW5nU3VyZmFjZTo6cnVuTXlUZXN0KToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAg
KENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91
bmRGaWx0ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RE
b250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0ZXI6OnJ1bk15VGVzdCk6Cisg
ICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0VHdvQmFja2dyb3VuZEZpbHRlcnNSZWR1Y2VP
Y2NsdXNpb25Ud2ljZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2Vy
VGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2U6OnJ1bk15VGVzdCk6
CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRG
b3JCYWNrZ3JvdW5kRmlsdGVyV2l0aENsaXApOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2Nj
bHVzaW9uVHJhY2tlclRlc3REb250T2NjbHVkZVBpeGVsc05lZWRlZEZvckJhY2tncm91bmRGaWx0
ZXJXaXRoQ2xpcDo6cnVuTXlUZXN0KToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlclRlc3RE
b250UmVkdWNlT2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVyKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lvbkJlbG93QmFj
a2dyb3VuZEZpbHRlcjo6cnVuTXlUZXN0KToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlclRl
c3REb250UmVkdWNlT2NjbHVzaW9uSWZCYWNrZ3JvdW5kRmlsdGVySXNPY2NsdWRlZCk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdERvbnRSZWR1Y2VPY2NsdXNp
b25JZkJhY2tncm91bmRGaWx0ZXJJc09jY2x1ZGVkOjpydW5NeVRlc3QpOgorICAgICAgICAoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdFJlZHVjZU9jY2x1c2lvbldoZW5CYWNrZ3JvdW5kRmlsdGVySXNQ
YXJ0aWFsbHlPY2NsdWRlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFj
a2VyVGVzdFJlZHVjZU9jY2x1c2lvbldoZW5CYWNrZ3JvdW5kRmlsdGVySXNQYXJ0aWFsbHlPY2Ns
dWRlZDo6cnVuTXlUZXN0KToKKwogMjAxMi0wNS0wMiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlz
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUeXBlRXJyb3I6IENhbm5v
dCBjYWxsIG1ldGhvZCAnY3JlYXRlTGl2ZUxvY2F0aW9uJyBvZiB1bmRlZmluZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oCmlu
ZGV4IDJiNTk0MGM5NDIwNjVmMThkMDcyZjI5ZDlhOGZjNzk3ZWMyNDU2YjguLjdjYjdlM2ZiYmFj
MTdiZjgwMzI1MjhiN2EwZDQ0MDc4YThmYzAyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaApAQCAtNzUsNyArNzUsOCBA
QCBzdHJ1Y3QgV2ViQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiA6IHB1Ymxp
YyBXZWJGaWx0ZXJPcGVyYXRpb24gewogICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyVHlwZUludmVydCA9IDUsCiAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJU
eXBlQnJpZ2h0bmVzcyA9IDcsCiAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJU
eXBlQ29udHJhc3QgPSA4Ci0gICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNhdXNlIHRo
aXMgaXMgbW9yZSBleHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0aGUgbGF5
ZXIuCisgICAgICAgIC8vIE9wYWNpdHkgaXMgbWlzc2luZyBiZWNhdXNlIHRoaXMgaXMgbW9yZSBl
eHBlbnNpdmUgdGhhbiBqdXN0IHNldHRpbmcgb3BhY2l0eSBvbiB0aGUgbGF5ZXIsCisgICAgICAg
IC8vIGFuZCBvcGFjaXR5IGlzIG5vdCBhbGxvd2VkIGZvciBiYWNrZ3JvdW5kIGZpbHRlcnMuCiAg
ICAgfTsKIAogICAgIFdlYkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24oQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlclR5cGUgdHlwZSwgZmxvYXQgYW1vdW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2Ns
dXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKaW5kZXggNDRhNjhiYTUyMTQwOTIwOTJiYzYw
ZmFlNDA0ZGFjYjkzZjlkOTI5Mi4uNTZlZGZmODRiZWU3MjNkY2JmYzAzNjQ3ZTBkNjNmZDVkZjQ1
MGQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCkBAIC0xNTYsNiAr
MTU2LDcwIEBAIHN0YXRpYyBpbmxpbmUgUmVnaW9uIHRyYW5zZm9ybVN1cmZhY2VPcGFxdWVSZWdp
b24oY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhCiAgICAgcmV0dXJuIHRyYW5zZm9ybWVk
UmVnaW9uOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmVkdWNlT2NjbHVzaW9uKGNvbnN0IElu
dFJlY3QmIGFmZmVjdGVkQXJlYSwgY29uc3QgSW50UmVjdCYgZXhwYW5kZWRQaXhlbCwgUmVnaW9u
JiBvY2NsdXNpb24pCit7CisgICAgaWYgKGFmZmVjdGVkQXJlYS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlZ2lvbiBhZmZlY3RlZE9jY2x1c2lvbiA9IGludGVyc2VjdChvY2Ns
dXNpb24sIGFmZmVjdGVkQXJlYSk7CisgICAgVmVjdG9yPEludFJlY3Q+IGFmZmVjdGVkT2NjbHVz
aW9uUmVjdHMgPSBhZmZlY3RlZE9jY2x1c2lvbi5yZWN0cygpOworCisgICAgb2NjbHVzaW9uLnN1
YnRyYWN0KGFmZmVjdGVkQXJlYSk7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBhZmZlY3Rl
ZE9jY2x1c2lvblJlY3RzLnNpemUoKTsgKytqKSB7CisgICAgICAgIEludFJlY3QmIG9jY2x1c2lv
blJlY3QgPSBhZmZlY3RlZE9jY2x1c2lvblJlY3RzW2pdOworCisgICAgICAgIC8vIFNocmluayB0
aGUgcmVjdCBieSBleHBhbmRpbmcgdGhlIG5vbi1vcGFxdWUgcGl4ZWxzIG91dHNpZGUgdGhlIHJl
Y3QuCisKKyAgICAgICAgLy8gVGhlIGV4cGFuZGVkUGl4ZWwgaXMgdGhlIEludFJlY3QgZm9yIGEg
c2luZ2xlIHBpeGVsIGFmdGVyIGJlaW5nCisgICAgICAgIC8vIGV4cGFuZGVkIGJ5IGZpbHRlcnMg
b24gdGhlIGxheWVyLiBUaGUgb3JpZ2luYWwgcGl4ZWwgd291bGQgYmUKKyAgICAgICAgLy8gSW50
UmVjdCgwLCAwLCAxLCAxKSwgYW5kIHRoZSBleHBhbmRlZCBwaXhlbCBpcyB0aGUgcmVjdCwgcmVs
YXRpdmUKKyAgICAgICAgLy8gdG8gdGhpcyBvcmlnaW5hbCByZWN0LCB0aGF0IHRoZSBvcmlnaW5h
bCBwaXhlbCBjYW4gaW5mbHVlbmNlIGFmdGVyCisgICAgICAgIC8vIGJlaW5nIGZpbHRlcmVkLgor
ICAgICAgICAvLyBUbyBjb252ZXJ0IHRoZSBleHBhbmRlZFBpeGVsIEludFJlY3QgYmFjayB0byBm
aWx0ZXIgb3V0c2V0czoKKyAgICAgICAgLy8geCA9IC1sZWZ0T3V0c2V0CisgICAgICAgIC8vIHdp
ZHRoID0gbGVmdE91dHNldCArIHJpZ2h0T3V0c2V0CisgICAgICAgIC8vIG1heFggPSB4ICsgd2lk
dGggPSAtbGVmdE91dHNldCArIGxlZnRPdXRzZXQgKyByaWdodE91dHNldCA9IHJpZ2h0T3V0c2V0
CisKKyAgICAgICAgLy8gVGhlIGxlZnRPdXRzZXQgb2YgdGhlIGZpbHRlcnMgbW92ZXMgcGl4ZWxz
IG9uIHRoZSByaWdodCBzaWRlIG9mCisgICAgICAgIC8vIHRoZSBvY2NsdXNpb25SZWN0IGludG8g
aXQsIHNocmlua2luZyBpdHMgcmlnaHQgZWRnZS4KKyAgICAgICAgaW50IHNocmlua0xlZnQgPSBv
Y2NsdXNpb25SZWN0LngoKSA9PSBhZmZlY3RlZEFyZWEueCgpID8gMCA6IGV4cGFuZGVkUGl4ZWwu
bWF4WCgpOworICAgICAgICBpbnQgc2hyaW5rVG9wID0gb2NjbHVzaW9uUmVjdC55KCkgPT0gYWZm
ZWN0ZWRBcmVhLnkoKSA/IDAgOiBleHBhbmRlZFBpeGVsLm1heFkoKTsKKyAgICAgICAgaW50IHNo
cmlua1JpZ2h0ID0gb2NjbHVzaW9uUmVjdC5tYXhYKCkgPT0gYWZmZWN0ZWRBcmVhLm1heFgoKSA/
IDAgOiAtZXhwYW5kZWRQaXhlbC54KCk7CisgICAgICAgIGludCBzaHJpbmtCb3R0b20gPSBvY2Ns
dXNpb25SZWN0Lm1heFkoKSA9PSBhZmZlY3RlZEFyZWEubWF4WSgpID8gMCA6IC1leHBhbmRlZFBp
eGVsLnkoKTsKKworICAgICAgICBvY2NsdXNpb25SZWN0Lm1vdmUoc2hyaW5rTGVmdCwgc2hyaW5r
VG9wKTsKKyAgICAgICAgb2NjbHVzaW9uUmVjdC5jb250cmFjdChzaHJpbmtMZWZ0ICsgc2hyaW5r
UmlnaHQsIHNocmlua1RvcCArIHNocmlua0JvdHRvbSk7CisKKyAgICAgICAgb2NjbHVzaW9uLnVu
aXRlKG9jY2x1c2lvblJlY3QpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGU+CitzdGF0aWMgdm9pZCByZWR1Y2VPY2NsdXNpb25CZWxvd1N1cmZhY2UoUmVu
ZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2UsIGNvbnN0IEludFJlY3QmIHN1cmZhY2VSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VyZmFjZVRyYW5zZm9ybSwgUmVuZGVyU3VyZmFjZVR5
cGUqIHN1cmZhY2VUYXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5UYXJnZXQsIFJlZ2lvbiYgb2Nj
bHVzaW9uSW5TY3JlZW4pCit7CisgICAgaWYgKHN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSW50UmVjdCBib3VuZHNJblRhcmdldCA9IGVuY2xvc2luZ0ludFJl
Y3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3Qoc3VyZmFjZVRyYW5zZm9ybSwgRmxvYXRSZWN0
KHN1cmZhY2VSZWN0KSkpOworICAgIGlmICghc3VyZmFjZS0+Y2xpcFJlY3QoKS5pc0VtcHR5KCkp
CisgICAgICAgIGJvdW5kc0luVGFyZ2V0LmludGVyc2VjdChzdXJmYWNlLT5jbGlwUmVjdCgpKTsK
KworICAgIGludCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExl
ZnQ7CisgICAgc3VyZmFjZS0+YmFja2dyb3VuZEZpbHRlcnMoKS5nZXRPdXRzZXRzKG91dHNldFRv
cCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdCk7CisKKyAgICAvLyBUaGUg
ZmlsdGVyIGNhbiBtb3ZlIHBpeGVscyBmcm9tIG91dHNpZGUgb2YgdGhlIGNsaXAsIHNvIGFsbG93
IGFmZmVjdGVkQXJlYSB0byBleHBhbmQgb3V0c2lkZSB0aGUgY2xpcC4KKyAgICBib3VuZHNJblRh
cmdldC5tb3ZlKC1vdXRzZXRMZWZ0LCAtb3V0c2V0VG9wKTsKKyAgICBib3VuZHNJblRhcmdldC5l
eHBhbmQob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20p
OworCisgICAgSW50UmVjdCBib3VuZHNJblNjcmVlbiA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRo
VXRpbDo6bWFwQ2xpcHBlZFJlY3Qoc3VyZmFjZVRhcmdldC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSwgRmxvYXRSZWN0KGJvdW5kc0luVGFyZ2V0KSkpOworCisgICAgSW50UmVjdCBmaWx0ZXJPdXRz
ZXRzSW5UYXJnZXQoLW91dHNldExlZnQsIC1vdXRzZXRUb3AsIG91dHNldExlZnQgKyBvdXRzZXRS
aWdodCwgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICBJbnRSZWN0IGZpbHRlck91dHNl
dHNJblNjcmVlbiA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3Qo
c3VyZmFjZVRhcmdldC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwgRmxvYXRSZWN0KGZpbHRlck91
dHNldHNJblRhcmdldCkpKTsKKworICAgIHJlZHVjZU9jY2x1c2lvbihib3VuZHNJblRhcmdldCwg
ZmlsdGVyT3V0c2V0c0luVGFyZ2V0LCBvY2NsdXNpb25JblRhcmdldCk7CisgICAgcmVkdWNlT2Nj
bHVzaW9uKGJvdW5kc0luU2NyZWVuLCBmaWx0ZXJPdXRzZXRzSW5TY3JlZW4sIG9jY2x1c2lvbklu
U2NyZWVuKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZT4KIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVy
U3VyZmFjZVR5cGUqIG5ld1RhcmdldCkKIHsKQEAgLTE3MCw5ICsyMzQsMTYgQEAgdm9pZCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpsZWF2ZVRv
VGFyZ2V0UmVuZGVyU3UKICAgICBpZiAob2xkVGFyZ2V0LT5oYXNSZXBsaWNhKCkpCiAgICAgICAg
IG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0LnVuaXRlKHRyYW5zZm9ybVN1cmZhY2VPcGFx
dWVSZWdpb248UmVuZGVyU3VyZmFjZVR5cGU+KG9sZFRhcmdldCwgbV9zdGFja1tsYXN0SW5kZXhd
Lm9jY2x1c2lvbkluVGFyZ2V0LCBvbGRUYXJnZXQtPnJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oKSkp
OwogCisgICAgSW50UmVjdCB1bm9jY2x1ZGVkU3VyZmFjZVJlY3Q7CisgICAgSW50UmVjdCB1bm9j
Y2x1ZGVkUmVwbGljYVJlY3Q7CisgICAgaWYgKG9sZFRhcmdldC0+YmFja2dyb3VuZEZpbHRlcnMo
KS5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkgeworICAgICAgICB1bm9jY2x1ZGVkU3VyZmFj
ZVJlY3QgPSB1bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KG9sZFRhcmdl
dCwgZmFsc2UsIG9sZFRhcmdldC0+Y29udGVudFJlY3QoKSk7CisgICAgICAgIGlmIChvbGRUYXJn
ZXQtPmhhc1JlcGxpY2EoKSkKKyAgICAgICAgICAgIHVub2NjbHVkZWRSZXBsaWNhUmVjdCA9IHVu
b2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qob2xkVGFyZ2V0LCB0cnVlLCBv
bGRUYXJnZXQtPmNvbnRlbnRSZWN0KCkpOworICAgIH0KKwogICAgIGlmIChzdXJmYWNlV2lsbEJl
QXRUb3BBZnRlclBvcCkgewogICAgICAgICAvLyBNZXJnZSB0aGUgdG9wIG9mIHRoZSBzdGFjayBk
b3duLgotCiAgICAgICAgIG1fc3RhY2tbbGFzdEluZGV4IC0gMV0ub2NjbHVzaW9uSW5TY3JlZW4u
dW5pdGUobV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluU2NyZWVuKTsKICAgICAgICAgbV9z
dGFja1tsYXN0SW5kZXggLSAxXS5vY2NsdXNpb25JblRhcmdldC51bml0ZShvbGRUYXJnZXRPY2Ns
dXNpb25Jbk5ld1RhcmdldCk7CiAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwpAQCAtMTgx
LDYgKzI1MiwxMiBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5k
ZXJTdXJmYWNlVHlwZT46OmxlYXZlVG9UYXJnZXRSZW5kZXJTdQogICAgICAgICBtX3N0YWNrLmxh
c3QoKS5zdXJmYWNlID0gbmV3VGFyZ2V0OwogICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNp
b25JblRhcmdldCA9IG9sZFRhcmdldE9jY2x1c2lvbkluTmV3VGFyZ2V0OwogICAgIH0KKworICAg
IGlmIChvbGRUYXJnZXQtPmJhY2tncm91bmRGaWx0ZXJzKCkuaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCkpIHsKKyAgICAgICAgcmVkdWNlT2NjbHVzaW9uQmVsb3dTdXJmYWNlKG9sZFRhcmdldCwg
dW5vY2NsdWRlZFN1cmZhY2VSZWN0LCBvbGRUYXJnZXQtPm9yaWdpblRyYW5zZm9ybSgpLCBuZXdU
YXJnZXQsIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LCBtX3N0YWNrLmxhc3QoKS5v
Y2NsdXNpb25JblNjcmVlbik7CisgICAgICAgIGlmIChvbGRUYXJnZXQtPmhhc1JlcGxpY2EoKSkK
KyAgICAgICAgICAgIHJlZHVjZU9jY2x1c2lvbkJlbG93U3VyZmFjZShvbGRUYXJnZXQsIHVub2Nj
bHVkZWRSZXBsaWNhUmVjdCwgb2xkVGFyZ2V0LT5yZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCksIG5l
d1RhcmdldCwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQsIG1fc3RhY2subGFzdCgp
Lm9jY2x1c2lvbkluU2NyZWVuKTsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVy
VHlwZT4KQEAgLTM2NywxMSArNDQ0LDExIEBAIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
Ci1JbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46OnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QoY29uc3QgTGF5
ZXJUeXBlKiBsYXllciwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkgY29uc3QKK0ludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChj
b25zdCBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0
eSgpKTsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hpbGUgdGhlIGNvbnRyaWJ1dGlu
ZyByZW5kZXIgc3VyZmFjZSBpcyBzdGlsbCBjb25zaWRlcmVkIHRoZSBjdXJyZW50IHRhcmdldCBp
biB0aGUgb2NjbHVzaW9uIHRyYWNrZXIuCi0gICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CisgICAgQVNTRVJUKHN1cmZhY2Ug
PT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKICAgICAvLyBBIGNvbnRyaWJ1dGluZyBzdXJm
YWNlIGRvZXNuJ3QgZ2V0IG9jY2x1ZGVkIGJ5IHRoaW5ncyBpbnNpZGUgaXRzIG93biBzdXJmYWNl
LCBzbyBvbmx5IHRoaW5ncyBvdXRzaWRlIHRoZSBzdXJmYWNlIGNhbiBvY2NsdWRlIGl0LiBUaGF0
IG9jY2x1c2lvbiBpcwogICAgIC8vIGZvdW5kIGp1c3QgYmVsb3cgdGhlIHRvcCBvZiB0aGUgc3Rh
Y2sgKGlmIGl0IGV4aXN0cykuCkBAIC0zODAsNyArNDU3LDYgQEAgSW50UmVjdCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29u
dHJpYnUKICAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gY29u
dGVudFJlY3Q7CiAKLSAgICBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSA9IGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CiAgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNr
W21fc3RhY2suc2l6ZSgpIC0gMl07CiAKICAgICBJbnRSZWN0IHN1cmZhY2VDbGlwUmVjdCA9IHN1
cmZhY2UtPmNsaXBSZWN0KCk7CkBAIC00MjYsNyArNTAyLDcgQEAgdGVtcGxhdGUgdm9pZCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46
OmxlYXYKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjb25zdCBM
YXllckNocm9taXVtKik7CiB0ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5
ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6b2NjbHVkZWQoY29uc3QgTGF5ZXJD
aHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKIHRlbXBsYXRlIElu
dFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKLXRlbXBsYXRlIEludFJlY3QgQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1
bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNvbnN0IExheWVyQ2hyb21p
dW0qLCBib29sIGZvclJlcGxpY2EsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsK
K3RlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRl
bnRSZWN0KGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSosIGJvb2wgZm9yUmVwbGljYSwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46Omxh
eWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgTGF5ZXJDaHJvbWl1bSopIGNvbnN0
OwogCiB0ZW1wbGF0ZSBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRl
clN1cmZhY2U+OjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNj
cmVlblNwYWNlLCBib29sIHJlY29yZE1ldHJpY3NGb3JGcmFtZSk7CkBAIC00MzgsNyArNTE0LDcg
QEAgdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1Jl
bmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2UKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6bWFya09jY2x1ZGVkQmVoaW5k
TGF5ZXIoY29uc3QgQ0NMYXllckltcGwqKTsKIHRlbXBsYXRlIGJvb2wgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6b2NjbHVkZWQoY29uc3QgQ0NM
YXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBJ
bnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBDQ0xheWVySW1wbCosIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKLXRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6dW5vY2NsdWRlZENvbnRyaWJ1
dGluZ1N1cmZhY2VDb250ZW50UmVjdChjb25zdCBDQ0xheWVySW1wbCosIGJvb2wgZm9yUmVwbGlj
YSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwordGVtcGxhdGUgSW50UmVjdCBD
Q09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Ojp1bm9j
Y2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNvbnN0IENDUmVuZGVyU3VyZmFj
ZSosIGJvb2wgZm9yUmVwbGljYSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Owog
dGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1Jl
bmRlclN1cmZhY2U+OjpsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKGNvbnN0IENDTGF5
ZXJJbXBsKikgY29uc3Q7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaAppbmRl
eCAyNzA1YzZiMTMzMWRmZDk0ZmI1YTgzZjcwNmNiNDE4ZmJlMWFiYjc5Li5iODAyY2M2NDNjZTRh
NDIwZDNhYTAzZWFiYzk5ZmIyODRiMGRlNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRy
YWNrZXIuaApAQCAtNTksOSArNTksOSBAQCBwdWJsaWM6CiAgICAgLy8gR2l2ZXMgYW4gdW5vY2Ns
dWRlZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGluIHRoZSBjb250ZW50IHNwYWNlIG9mIHRo
ZSBsYXllci4gVXNlZCB3aGVuIGNvbnNpZGVyaW5nIG9jY2x1c2lvbiBmb3IgYSBsYXllciB0aGF0
IHBhaW50cy9kcmF3cyBzb21ldGhpbmcuCiAgICAgSW50UmVjdCB1bm9jY2x1ZGVkQ29udGVudFJl
Y3QoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Owog
Ci0gICAgLy8gR2l2ZXMgYW4gdW5vY2NsdWRlZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGlu
IHRoZSBjb250ZW50IHNwYWNlIG9mIHRoZSBzdXJmYWNlIG93bmVkIGJ5IHxsYXllcnwuIFVzZWQg
d2hlbiBjb25zaWRlcmluZyBvY2NsdXNpb24gZm9yIGEgY29udHJpYnV0aW5nIHN1cmZhY2UKKyAg
ICAvLyBHaXZlcyBhbiB1bm9jY2x1ZGVkIHN1Yi1yZWN0IG9mIHxjb250ZW50UmVjdHwgaW4gdGhl
IGNvbnRlbnQgc3BhY2Ugb2YgdGhlIHN1cmZhY2UuIFVzZWQgd2hlbiBjb25zaWRlcmluZyBvY2Ns
dXNpb24gZm9yIGEgY29udHJpYnV0aW5nIHN1cmZhY2UKICAgICAvLyB0aGF0IGlzIHJlbmRlcmlu
ZyBpbnRvIGFub3RoZXIgdGFyZ2V0IHN1cmZhY2UuCi0gICAgSW50UmVjdCB1bm9jY2x1ZGVkQ29u
dHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSosIGJvb2wgZm9yUmVw
bGljYSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OworICAgIEludFJlY3QgdW5v
Y2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjb25zdCBSZW5kZXJTdXJmYWNl
VHlwZSosIGJvb2wgZm9yUmVwbGljYSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0
OwogCiAgICAgLy8gUmVwb3J0IG9wZXJhdGlvbnMgZm9yIHJlY29yZGluZyBvdmVyZHJhdyBtZXRy
aWNzLgogICAgIENDT3ZlcmRyYXdNZXRyaWNzJiBvdmVyZHJhd01ldHJpY3MoKSBjb25zdCB7IHJl
dHVybiAqbV9vdmVyZHJhd01ldHJpY3MuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3Bw
CmluZGV4IDk0ZDFkNjcwNGYyMTJkNzQ5MWM0NTIyZjhiNmM1MGEzYjZiN2JjYzMuLmU1ZmQ2OTBj
Y2VhMjBhMzg1ZjUyMmU5YTUzZmM2MDBiMzI1NjkwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVy
LmNwcApAQCAtNzEsMTMgKzcxLDEzIEBAIGJvb2wgQ0NRdWFkQ3VsbGVyOjphcHBlbmQoUGFzc093
blB0cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpCiAKIGJvb2wgQ0NRdWFkQ3VsbGVyOjphcHBl
bmRTdXJmYWNlKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcGFzc0RyYXdRdWFkKQogewotICAgIElu
dFJlY3QgY3VsbGVkUmVjdCA9IG1fb2NjbHVzaW9uVHJhY2tlci0+dW5vY2NsdWRlZENvbnRyaWJ1
dGluZ1N1cmZhY2VDb250ZW50UmVjdChtX2xheWVyLCBmYWxzZSwgcGFzc0RyYXdRdWFkLT5xdWFk
UmVjdCgpKTsKKyAgICBJbnRSZWN0IGN1bGxlZFJlY3QgPSBtX29jY2x1c2lvblRyYWNrZXItPnVu
b2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QobV9sYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLCBmYWxzZSwgcGFzc0RyYXdRdWFkLT5xdWFkUmVjdCgpKTsKICAgICByZXR1cm4gYXBw
ZW5kUXVhZEludGVybmFsKHBhc3NEcmF3UXVhZCwgY3VsbGVkUmVjdCwgbV9xdWFkTGlzdCwgKm1f
b2NjbHVzaW9uVHJhY2tlcik7CiB9CiAKIGJvb2wgQ0NRdWFkQ3VsbGVyOjphcHBlbmRSZXBsaWNh
KFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcGFzc0RyYXdRdWFkKQogewotICAgIEludFJlY3QgY3Vs
bGVkUmVjdCA9IG1fb2NjbHVzaW9uVHJhY2tlci0+dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZh
Y2VDb250ZW50UmVjdChtX2xheWVyLCB0cnVlLCBwYXNzRHJhd1F1YWQtPnF1YWRSZWN0KCkpOwor
ICAgIEludFJlY3QgY3VsbGVkUmVjdCA9IG1fb2NjbHVzaW9uVHJhY2tlci0+dW5vY2NsdWRlZENv
bnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChtX2xheWVyLT5yZW5kZXJTdXJmYWNlKCksIHRy
dWUsIHBhc3NEcmF3UXVhZC0+cXVhZFJlY3QoKSk7CiAgICAgcmV0dXJuIGFwcGVuZFF1YWRJbnRl
cm5hbChwYXNzRHJhd1F1YWQsIGN1bGxlZFJlY3QsIG1fcXVhZExpc3QsICptX29jY2x1c2lvblRy
YWNrZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
T2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRleCA0MWZiNWE1MWY1NGU2ZTUyZjUyZWYxZTFk
MmI5ZDc2OTYyYmUwMWJlLi4zMGYzYmQyZTIwZjlkYWE5OTU5MTljODFmMjIxYjkyNmRhNTk4Y2Y1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJh
Y2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNp
b25UcmFja2VyVGVzdC5jcHAKQEAgLTEwMTEsNyArMTAxMSw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgtMjAsIC0yMCwgMTAwMCwg
MTAwMCkpOwogCiAgICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgYWJvdmUgY2hpbGQyJ3Mgc3Vy
ZmFjZSBpbiB0aGUgei1vcmRlci4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgtMTAs
IDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29u
dGVudFJlY3QoY2hpbGQyLCBmYWxzZSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOworICAg
ICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDIwLCA3MCwgODApLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjaGlsZDItPnJlbmRlclN1
cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKIAogICAgICAgICB0
aGlzLT5sZWF2ZUNvbnRyaWJ1dGluZ1N1cmZhY2UoY2hpbGQyLCBvY2NsdXNpb24pOwogICAgICAg
ICB0aGlzLT52aXNpdExheWVyKGxheWVyMSwgb2NjbHVzaW9uKTsKQEAgLTEwMjksNyArMTAyOSw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChj
aGlsZDEsIEludFJlY3QoLTEwLCA0MzAsIDgwLCA3MSkpKTsKIAogICAgICAgICAvLyBjaGlsZDIn
cyBjb250ZW50cyB3aWxsIG9jY2x1ZGUgY2hpbGQxIGJlbG93IGl0LgotICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KC0xMCwgNDMwLCAxMCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjaGlsZDEsIGZhbHNlLCBJbnRSZWN0KC0xMCwg
NDMwLCA4MCwgNzApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0MzAs
IDEwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRS
ZWN0KGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwgSW50UmVjdCgtMTAsIDQzMCwgODAs
IDcwKSkpOwogCiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFjZShjaGlsZDEs
IG9jY2x1c2lvbik7CiAgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIocGFyZW50LCBvY2NsdXNpb24p
OwpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB0aGlzLT5lbnRlckNv
bnRyaWJ1dGluZ1N1cmZhY2UoY2hpbGQyLCBvY2NsdXNpb24pOwogCiAgICAgICAgIC8vIFRoZXJl
IGlzIG5vdGhpbmcgYWJvdmUgY2hpbGQyJ3Mgc3VyZmFjZSBpbiB0aGUgei1vcmRlci4KLSAgICAg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QoY2hpbGQyLCBmYWxzZSwgSW50
UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KC0xMCwgNDIwLCA3MCwgODApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZh
Y2VDb250ZW50UmVjdChjaGlsZDItPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoLTEw
LCA0MjAsIDcwLCA4MCkpKTsKIAogICAgICAgICB0aGlzLT5sZWF2ZUNvbnRyaWJ1dGluZ1N1cmZh
Y2UoY2hpbGQyLCBvY2NsdXNpb24pOwogICAgICAgICB0aGlzLT52aXNpdExheWVyKGxheWVyMSwg
b2NjbHVzaW9uKTsKQEAgLTExMzgsOSArMTEzOCw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDEsIEludFJlY3QoNDIxLCAtMjAsIDgw
LCA5MCkpKTsKIAogICAgICAgICAvLyBjaGlsZDIncyBjb250ZW50cyB3aWxsIG9jY2x1ZGUgY2hp
bGQxIGJlbG93IGl0LgotICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQyMCwgLTIwLCA4
MCwgOTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVj
dChjaGlsZDEsIGZhbHNlLCBJbnRSZWN0KDQyMCwgLTIwLCA4MCwgOTApKSk7Ci0gICAgICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoNDkwLCAtMTAsIDEwLCA4MCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkMSwgZmFsc2UsIEludFJlY3Qo
NDIwLCAtMTAsIDgwLCA5MCkpKTsKLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MjAs
IC0yMCwgNzAsIDEwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29u
dGVudFJlY3QoY2hpbGQxLCBmYWxzZSwgSW50UmVjdCg0MjAsIC0yMCwgNzAsIDkwKSkpOworICAg
ICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQyMCwgLTIwLCA4MCwgOTApLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChjaGlsZDEtPnJlbmRlclN1
cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoNDIwLCAtMjAsIDgwLCA5MCkpKTsKKyAgICAgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCg0OTAsIC0xMCwgMTAsIDgwKSwgb2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QoY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCks
IGZhbHNlLCBJbnRSZWN0KDQyMCwgLTEwLCA4MCwgOTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoNDIwLCAtMjAsIDcwLCAxMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJp
YnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwg
SW50UmVjdCg0MjAsIC0yMCwgNzAsIDkwKSkpOwogCiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJp
YnV0aW5nU3VyZmFjZShjaGlsZDEsIG9jY2x1c2lvbik7CiAgICAgICAgIHRoaXMtPmVudGVyTGF5
ZXIocGFyZW50LCBvY2NsdXNpb24pOwpAQCAtMTk3MCw3ICsxOTcwLDcgQEAgcHJvdGVjdGVkOgog
CiAgICAgICAgIHRoaXMtPmVudGVyQ29udHJpYnV0aW5nU3VyZmFjZShzdXJmYWNlLCBvY2NsdXNp
b24pOwogICAgICAgICAvLyBPY2NsdXNpb24gd2l0aGluIHRoZSBzdXJmYWNlIGlzIGxvc3Qgd2hl
biBsZWF2aW5nIHRoZSBhbmltYXRpbmcgc3VyZmFjZS4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgwLCAwLCAyNTAsIDMwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5n
U3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAw
KSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDI1MCwgMzAwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZS0+
cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKICAgICAg
ICAgdGhpcy0+bGVhdmVDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAK
ICAgICAgICAgdGhpcy0+dmlzaXRMYXllcihsYXllciwgb2NjbHVzaW9uKTsKQEAgLTIwMjIsNyAr
MjAyMiw3IEBAIHByb3RlY3RlZDoKIAogICAgICAgICB0aGlzLT5lbnRlckNvbnRyaWJ1dGluZ1N1
cmZhY2Uoc3VyZmFjZSwgb2NjbHVzaW9uKTsKICAgICAgICAgLy8gT2NjbHVzaW9uIHdpdGhpbiB0
aGUgc3VyZmFjZSBpcyBsb3N0IHdoZW4gbGVhdmluZyB0aGUgYW5pbWF0aW5nIHN1cmZhY2UuCi0g
ICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMjUwLCAzMDApLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLCBmYWxzZSwg
SW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgwLCAwLCAyNTAsIDMwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFj
ZUNvbnRlbnRSZWN0KHN1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoMCwg
MCwgMzAwLCAzMDApKSk7CiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFjZShz
dXJmYWNlLCBvY2NsdXNpb24pOwogCiAgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIobGF5ZXIsIG9j
Y2x1c2lvbik7CkBAIC0yMTExLDcgKzIxMTEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgdGhp
cy0+ZW50ZXJDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAgICAgICAg
IC8vIFRoZSBjb250cmlidXRpbmcgfHN1cmZhY2V8IGlzIGFuaW1hdGluZyBzbyBpdCBjYW4ndCBi
ZSBvY2NsdWRlZC4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDMw
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1
cmZhY2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxz
ZSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKICAgICAgICAgdGhpcy0+bGVhdmVDb250cmli
dXRpbmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAKICAgICAgICAgdGhpcy0+ZW50ZXJM
YXllcihsYXllciwgb2NjbHVzaW9uKTsKQEAgLTIyMjYsNyArMjIyNiw3IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgdGhpcy0+ZW50ZXJDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2UsIG9jY2x1c2lv
bik7CiAKICAgICAgICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgc28gaXQgc2hvdWxkbid0
IHRoaW5rIGl0IGlzLgotICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qo
c3VyZmFjZSwgZmFsc2UsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCksIGZh
bHNlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwogICAgIH0KIH07CiAKQEAgLTIyNjQsOCAr
MjI2NCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgdGhpcy0+ZW50ZXJDb250cmlidXRpbmdTdXJm
YWNlKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAKICAgICAgICAgLy8gU3VyZmFjZSBpcyBvY2NsdWRl
ZCwgYnV0IG9ubHkgdGhlIHRvcCAxMHB4IG9mIHRoZSByZXBsaWNhLgotICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1
dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLCBmYWxzZSwgSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCkpKTsKLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAxMCwgMTAwLCA5MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZh
Y2UsIHRydWUsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMCwgMCwgMCwgMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5n
U3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJl
Y3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwg
MTAsIDEwMCwgOTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250
ZW50UmVjdChzdXJmYWNlLT5yZW5kZXJTdXJmYWNlKCksIHRydWUsIEludFJlY3QoMCwgMCwgMTAw
LCAxMDApKSk7CiAgICAgfQogfTsKIApAQCAtMjMwNSw4ICsyMzA1LDggQEAgcHJvdGVjdGVkOgog
ICAgICAgICB0aGlzLT5lbnRlckNvbnRyaWJ1dGluZ1N1cmZhY2Uoc3VyZmFjZSwgb2NjbHVzaW9u
KTsKIAogICAgICAgICAvLyBTdXJmYWNlIGFuZCByZXBsaWNhIGFyZSBvY2NsdWRlZCBkaWZmZXJl
bnQgYW1vdW50cy4KLSAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MCwgMCwgNjAsIDEw
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1
cmZhY2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwotICAgICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDUwLCAwLCA1MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZSwgdHJ1ZSwgSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MCwgMCwgNjAsIDEw
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1
cmZhY2UtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7
CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDAsIDUwLCAxMDApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlLT5yZW5k
ZXJTdXJmYWNlKCksIHRydWUsIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CiAgICAgfQogfTsK
IApAQCAtMjM1MSw3ICsyMzUxLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB0aGlzLT5lbnRlckNv
bnRyaWJ1dGluZ1N1cmZhY2Uoc3VyZmFjZUNoaWxkLCBvY2NsdXNpb24pOwogICAgICAgICAvLyBU
aGUgc3VyZmFjZUNoaWxkJ3MgcGFyZW50IGRvZXMgbm90IGhhdmUgYSBjbGlwUmVjdCBhcyBpdCBv
d25zIGEgcmVuZGVyIHN1cmZhY2UuIE1ha2Ugc3VyZSB0aGUgdW5vY2NsdWRlZCByZWN0CiAgICAg
ICAgIC8vIGRvZXMgbm90IGdldCBjbGlwcGVkIGF3YXkgaW5hcHByb3ByaWF0ZWx5LgotICAgICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQwLCAxMDAsIDEwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3Qoc3VyZmFjZUNoaWxkLCBmYWxzZSwg
SW50UmVjdCgwLCAwLCAxMDAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDQwLCAxMDAsIDEwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNl
Q29udGVudFJlY3Qoc3VyZmFjZUNoaWxkLT5yZW5kZXJTdXJmYWNlKCksIGZhbHNlLCBJbnRSZWN0
KDAsIDAsIDEwMCwgNTApKSk7CiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFj
ZShzdXJmYWNlQ2hpbGQsIG9jY2x1c2lvbik7CiAKICAgICAgICAgLy8gV2hlbiB0aGUgc3VyZmFj
ZUNoaWxkJ3Mgb2NjbHVzaW9uIGlzIHRyYW5zZm9ybWVkIHVwIHRvIGl0cyBwYXJlbnQsIG1ha2Ug
c3VyZSBpdCBpcyBub3QgY2xpcHBlZCBhd2F5IGluYXBwcm9wcmlhdGVseSBhbHNvLgpAQCAtMjM2
NCw3ICsyMzY0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIHRoaXMtPmVudGVyQ29udHJpYnV0
aW5nU3VyZmFjZShzdXJmYWNlLCBvY2NsdXNpb24pOwogICAgICAgICAvLyBUaGUgc3VyZmFjZSdz
IHBhcmVudCBkb2VzIGhhdmUgYSBjbGlwUmVjdCBhcyBpdCBpcyB0aGUgcm9vdCBsYXllci4KLSAg
ICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UsIGZhbHNlLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDAsIDUwLCAxMDAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNl
Q29udGVudFJlY3Qoc3VyZmFjZS0+cmVuZGVyU3VyZmFjZSgpLCBmYWxzZSwgSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCkpKTsKICAgICB9CiB9OwogCkBAIC0yMzg3LDggKzIzODcsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwg
MTAwMCwgMTAwMCkpOwogCiAgICAgICAgIC8vIHx0b3Btb3N0fCBvY2NsdWRlcyBldmVyeXRoaW5n
IHBhcnRpYWxseSBzbyB3ZSBrbm93IG9jY2x1c2lvbiBpcyBoYXBwZW5pbmcgYXQgYWxsLgotICAg
ICAgICB0aGlzLT5lbnRlckxheWVyKHRvcG1vc3QsIG9jY2x1c2lvbik7Ci0gICAgICAgIHRoaXMt
PmxlYXZlTGF5ZXIodG9wbW9zdCwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXll
cih0b3Btb3N0LCBvY2NsdXNpb24pOwogCiAgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MCwgMCwgODAsIDUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CiAgICAgICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3Bh
Y2UoKS5yZWN0cygpLnNpemUoKSk7CkBAIC0yNDA5LDE2ICsyNDA4LDQ5NyBAQCBwcm90ZWN0ZWQ6
CiAKICAgICAgICAgdGhpcy0+ZW50ZXJDb250cmlidXRpbmdTdXJmYWNlKHN1cmZhY2VDaGlsZCwg
b2NjbHVzaW9uKTsKICAgICAgICAgLy8gVGhlIHN1cmZhY2VDaGlsZCdzIHBhcmVudCBkb2VzIG5v
dCBoYXZlIGEgY2xpcFJlY3QgYXMgaXQgb3ducyBhIHJlbmRlciBzdXJmYWNlLgotICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDUwLCA4MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChzdXJmYWNlQ2hpbGQsIGZhbHNlLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAs
IDUwLCA4MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250
ZW50UmVjdChzdXJmYWNlQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSwgZmFsc2UsIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApKSk7CiAgICAgICAgIHRoaXMtPmxlYXZlQ29udHJpYnV0aW5nU3VyZmFjZShz
dXJmYWNlQ2hpbGQsIG9jY2x1c2lvbik7CiAKICAgICAgICAgdGhpcy0+dmlzaXRMYXllcihzdXJm
YWNlLCBvY2NsdXNpb24pOwogICAgICAgICB0aGlzLT5lbnRlckNvbnRyaWJ1dGluZ1N1cmZhY2Uo
c3VyZmFjZSwgb2NjbHVzaW9uKTsKICAgICAgICAgLy8gVGhlIHN1cmZhY2UncyBwYXJlbnQgZG9l
cyBoYXZlIGEgY2xpcFJlY3QgYXMgaXQgaXMgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMCwgNTAsIDgwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRSZWN0KHN1cmZhY2UsIGZhbHNlLCBJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDUwLCA4MCwg
NTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdChz
dXJmYWNlLT5yZW5kZXJTdXJmYWNlKCksIGZhbHNlLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkp
OwogICAgIH0KIH07CiAKIEFMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRy
YWNrZXJUZXN0U3VyZmFjZUNoaWxkT2ZDbGlwcGluZ1N1cmZhY2UpOwogCit0ZW1wbGF0ZTxjbGFz
cyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0
RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyIDogcHVibGljIENDT2Nj
bHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG9wYXF1ZUxheWVycz4geworcHJvdGVjdGVkOgorICAg
IHZvaWQgcnVuTXlUZXN0KCkKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNj
YWxlQnlIYWxmOworICAgICAgICBzY2FsZUJ5SGFsZi5zY2FsZSgwLjUpOworCisgICAgICAgIC8v
IE1ha2UgYSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYSwgZWFjaCA1MHg1MCwgdGhhdCBhcmUgY29t
cGxldGVseSBzdXJyb3VuZGVkIGJ5IG9wYXF1ZSBsYXllcnMgd2hpY2ggYXJlIGFib3ZlIHRoZW0g
aW4gdGhlIHotb3JkZXIuCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGlzIHNjYWxlZCB0byB0ZXN0
IHRoYXQgdGhlIHBpeGVsIG1vdmluZyBpcyBkb25lIGluIHRoZSB0YXJnZXQgc3BhY2UsIHdoZXJl
IHRoZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBhcHBsaWVkLCBidXQgdGhlIHN1cmZhY2UKKyAgICAg
ICAgLy8gYXBwZWFycyBhdCA1MCwgNTAgYW5kIHRoZSByZXBsaWNhIGF0IDIwMCwgNTAuCisgICAg
ICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVh
dGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMw
MCwgMTUwKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3Vy
ZmFjZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHNjYWxlQnlIYWxmLCBGbG9h
dFBvaW50KDUwLCA1MCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisgICAgICAgIHRoaXMt
PmNyZWF0ZVJlcGxpY2FMYXllcihmaWx0ZXJlZFN1cmZhY2UsIHRoaXMtPmlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDMwMCwgMCksIEludFNpemUoKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihw
YXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMw
MCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb2NjbHVk
aW5nTGF5ZXIyID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMTAwKSwgSW50U2l6ZSgzMDAsIDUwKSwgdHJ1ZSk7Cisg
ICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMyA9IHRoaXMt
PmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlw
ZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI0ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVy
KHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMTAwLCA1MCksIEludFNp
emUoMTAwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBv
Y2NsdWRpbmdMYXllcjUgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5p
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVl
KTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1cmZhY2UuCisg
ICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRp
b25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMTAsIFdlYkNv
cmU6OkZpeGVkKSwgRmlsdGVyT3BlcmF0aW9uOjpCTFVSKSk7CisgICAgICAgIGZpbHRlcmVkU3Vy
ZmFjZS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICAgICAgLy8gU2F2ZSB0
aGUgZGlzdGFuY2Ugb2YgaW5mbHVlbmNlIGZvciB0aGUgYmx1ciBlZmZlY3QuCisgICAgICAgIGlu
dCBvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0b20sIG91dHNldExlZnQ7CisgICAg
ICAgIGZpbHRlcnMuZ2V0T3V0c2V0cyhvdXRzZXRUb3AsIG91dHNldFJpZ2h0LCBvdXRzZXRCb3R0
b20sIG91dHNldExlZnQpOworCisgICAgICAgIHRoaXMtPmNhbGNEcmF3RXRjKHBhcmVudCk7CisK
KyAgICAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcldpdGhTY2lzc29yPHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUsIHR5cGVuYW1lIFR5cGVzOjpSZW5kZXJTdXJmYWNlVHlwZT4gb2NjbHVzaW9u
KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgICAgICBvY2NsdXNpb24uc2V0TGF5ZXJT
Y2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKworICAgICAgICAvLyBUaGVz
ZSBsYXllcnMgb2NjbHVkZSBwaXhlbHMgZGlyZWN0bHkgYmVzaWRlIHRoZSBmaWx0ZXJlZFN1cmZh
Y2UuIEJlY2F1c2UgZmlsdGVyZWQgc3VyZmFjZSBibGVuZHMgcGl4ZWxzIGluIGEgcmFkaXVzLCBp
dCB3aWxsCisgICAgICAgIC8vIG5lZWQgdG8gc2VlIHNvbWUgb2YgdGhlIHBpeGVscyAodXAgdG8g
cmFkaXVzIGZhcikgdW5kZXJuZWF0aCB0aGUgb2NjbHVkaW5nTGF5ZXJzLgorICAgICAgICB0aGlz
LT52aXNpdExheWVyKG9jY2x1ZGluZ0xheWVyNSwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+
dmlzaXRMYXllcihvY2NsdWRpbmdMYXllcjQsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZp
c2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXIzLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNp
dExheWVyKG9jY2x1ZGluZ0xheWVyMiwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRM
YXllcihvY2NsdWRpbmdMYXllcjEsIG9jY2x1c2lvbik7CisKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNw
YWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lvbi5vY2NsdXNp
b25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3Vy
ZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVz
aW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIC8vIEV2ZXJ5
dGhpbmcgb3V0c2lkZSB0aGUgc3VyZmFjZS9yZXBsaWNhIGlzIG9jY2x1ZGVkIGJ1dCB0aGUgc3Vy
ZmFjZS9yZXBsaWNhIGl0c2VsZiBpcyBub3QuCisgICAgICAgIHRoaXMtPmVudGVyTGF5ZXIoZmls
dGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDEsIDAsIDk5LCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVk
U3VyZmFjZSwgSW50UmVjdCgxLCAwLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgwLCAxLCAxMDAsIDk5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgMSwgMTAwLCAxMDApKSk7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgOTksIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KC0xLCAwLCAxMDAsIDEwMCkpKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAxMDAsIDk5KSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgLTEsIDEw
MCwgMTAwKSkpOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAwICsgMSwgMCwg
OTksIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNl
LCBJbnRSZWN0KDMwMCArIDEsIDAsIDEwMCwgMTAwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDMwMCArIDAsIDEsIDEwMCwgOTkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50UmVjdCgzMDAgKyAwLCAxLCAxMDAsIDEwMCkpKTsK
KyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMDAgKyAwLCAwLCA5OSwgMTAwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMzAw
IC0gMSwgMCwgMTAwLCAxMDApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAw
ICsgMCwgMCwgMTAwLCA5OSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVy
ZWRTdXJmYWNlLCBJbnRSZWN0KDMwMCArIDAsIC0xLCAxMDAsIDEwMCkpKTsKKyAgICAgICAgdGhp
cy0+bGVhdmVMYXllcihmaWx0ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgLy8g
VGhlIGZpbHRlcmVkIGxheWVyL3JlcGxpY2EgZG9lcyBub3Qgb2NjbHVkZS4KKyAgICAgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25J
blNjcmVlblNwYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoNXUsIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDAsIDApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJn
ZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIG9jY2x1c2lvbi5v
Y2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8g
VGhlIHN1cmZhY2UgaGFzIGEgYmFja2dyb3VuZCBibHVyLCBzbyBpdCBuZWVkcyBwaXhlbHMgdGhh
dCBhcmUgY3VycmVudGx5IGNvbnNpZGVyZWQgb2NjbHVkZWQgaW4gb3JkZXIgdG8gYmUgZHJhd24u
IFNvIHRoZSBwaXhlbHMKKyAgICAgICAgLy8gaXQgbmVlZHMgc2hvdWxkIGJlIHJlbW92ZWQgc29t
ZSB0aGUgb2NjbHVkZWQgYXJlYSBzbyB0aGF0IHdoZW4gd2UgZ2V0IHRvIHRoZSBwYXJlbnQgdGhl
eSBhcmUgZHJhd24uCisgICAgICAgIHRoaXMtPnZpc2l0Q29udHJpYnV0aW5nU3VyZmFjZShmaWx0
ZXJlZFN1cmZhY2UsIG9jY2x1c2lvbik7CisKKyAgICAgICAgdGhpcy0+ZW50ZXJMYXllcihwYXJl
bnQsIG9jY2x1c2lvbik7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAw
LCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJl
Y3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAzMDAs
IDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgp
LnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICBJbnRSZWN0IG91dHNldFJlY3Q7CisgICAgICAg
IEludFJlY3QgdGVzdFJlY3Q7CisKKyAgICAgICAgLy8gTm90aGluZyBpbiB0aGUgYmx1ciBvdXRz
ZXRzIGZvciB0aGUgZmlsdGVyZWRTdXJmYWNlIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRS
ZWN0ID0gSW50UmVjdCg1MCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNl
dExlZnQgKyBvdXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAg
ICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNl
dFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkp
OworCisgICAgICAgIC8vIFN0dWZmIG91dHNpZGUgdGhlIGJsdXIgb3V0c2V0cyBpcyBzdGlsbCBv
Y2NsdWRlZCB0aG91Z2guCisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAg
dGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAg
ICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwg
MSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91
dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoLTEsIDApOworICAgICAgICB0ZXN0UmVj
dC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0
ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwgLTEpOworICAg
ICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNl
dFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkp
OworCisgICAgICAgIC8vIE5vdGhpbmcgaW4gdGhlIGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRl
cmVkU3VyZmFjZSdzIHJlcGxpY2EgaXMgb2NjbHVkZWQuCisgICAgICAgIG91dHNldFJlY3QgPSBJ
bnRSZWN0KDIwMCAtIG91dHNldExlZnQsIDUwIC0gb3V0c2V0VG9wLCA1MCArIG91dHNldExlZnQg
KyBvdXRzZXRSaWdodCwgNTAgKyBvdXRzZXRUb3AgKyBvdXRzZXRCb3R0b20pOworICAgICAgICB0
ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3Qs
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworCisg
ICAgICAgIC8vIFN0dWZmIG91dHNpZGUgdGhlIGJsdXIgb3V0c2V0cyBpcyBzdGlsbCBvY2NsdWRl
ZCB0aG91Z2guCisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJl
Y3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChvdXRzZXRSZWN0LCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudCwgdGVzdFJlY3QpKTsKKyAgICAgICAg
dGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7Cisg
ICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJl
Y3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoLTEsIDApOworICAgICAgICB0ZXN0UmVjdC5leHBh
bmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3QsIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAgICAgICB0ZXN0UmVj
dCA9IG91dHNldFJlY3Q7CisgICAgICAgIHRlc3RSZWN0Lm1vdmUoMCwgLTEpOworICAgICAgICB0
ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKG91dHNldFJlY3Qs
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LCB0ZXN0UmVjdCkpOworICAg
IH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJfVEVTVChDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNrZ3JvdW5kRmlsdGVyKTsKKwordGVtcGxh
dGU8Y2xhc3MgVHlwZXMsIGJvb2wgb3BhcXVlTGF5ZXJzPgorY2xhc3MgQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2NjbHVzaW9uVHdpY2UgOiBwdWJsaWMg
Q0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBlcywgb3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6
CisgICAgdm9pZCBydW5NeVRlc3QoKQorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggc2NhbGVCeUhhbGY7CisgICAgICAgIHNjYWxlQnlIYWxmLnNjYWxlKDAuNSk7CisKKyAgICAg
ICAgLy8gTWFrZXMgdHdvIHN1cmZhY2VzIHRoYXQgY29tcGxldGVseSBjb3ZlciB8cGFyZW50fC4g
VGhlIG9jY2x1c2lvbiBib3RoIGFib3ZlIGFuZCBiZWxvdyB0aGUgZmlsdGVycyB3aWxsIGJlIHJl
ZHVjZWQgYnkgZWFjaCBvZiB0aGVtLgorICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExh
eWVyVHlwZSogcm9vdCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoNzUsIDc1KSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIHBhcmVudCA9IHRoaXMtPmNyZWF0ZVN1cmZhY2Uocm9vdCwgc2NhbGVCeUhh
bGYsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTUwLCAxNTApKTsKKyAgICAgICAgcGFyZW50
LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJU
eXBlKiBmaWx0ZXJlZFN1cmZhY2UxID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwg
c2NhbGVCeUhhbGYsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7
CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZTIgPSB0
aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCBzY2FsZUJ5SGFsZiwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6
OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXJBYm92ZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXll
cihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDEwMCwgMTAwKSwgSW50
U2l6ZSg1MCwgNTApLCB0cnVlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVy
cyBvd24gc3VyZmFjZXMuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAg
ICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZShMZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAg
ICAgICAgZmlsdGVyZWRTdXJmYWNlMS0+c2V0QmFja2dyb3VuZEZpbHRlcnMoZmlsdGVycyk7Cisg
ICAgICAgIGZpbHRlcmVkU3VyZmFjZTItPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOwor
CisgICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNlIG9mIGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIg
ZWZmZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9t
LCBvdXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJzLmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRz
ZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0KTsKKworICAgICAgICB0aGlzLT5jYWxj
RHJhd0V0Yyhyb290KTsKKworICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNz
b3I8dHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZh
Y2VUeXBlPiBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9j
Y2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOwor
CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVkaW5nTGF5ZXJBYm92ZSwgb2NjbHVzaW9u
KTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAgLyAyLCAxMDAgLyAyLCA1MCAv
IDIsIDUwIC8gMiksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNl
KCkucmVjdHMoKS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwg
MTAwLCA1MCwgNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRz
KCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1
cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihmaWx0
ZXJlZFN1cmZhY2UyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdENvbnRyaWJ1dGlu
Z1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlMiwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlz
aXRMYXllcihmaWx0ZXJlZFN1cmZhY2UxLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNp
dENvbnRyaWJ1dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlMSwgb2NjbHVzaW9uKTsKKworICAg
ICAgICBBU1NFUlRfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVj
dHMoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25J
blRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CisKKyAgICAgICAgLy8gVGVzdCBleHBl
Y3RhdGlvbnMgaW4gdGhlIHRhcmdldC4KKyAgICAgICAgSW50UmVjdCBleHBlY3RlZE9jY2x1c2lv
biA9IEludFJlY3QoMTAwICsgb3V0c2V0UmlnaHQgKiAyLCAxMDAgKyBvdXRzZXRCb3R0b20gKiAy
LCA1MCAtIChvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQpICogMiwgNTAgLSAob3V0c2V0VG9wICsg
b3V0c2V0Qm90dG9tKSAqIDIpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9jY2x1
c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKClbMF0pOwor
CisgICAgICAgIC8vIFRlc3QgZXhwZWN0YXRpb25zIGluIHRoZSBzY3JlZW4uIFRha2UgdGhlIGNl
aWxpbmcgb2YgaGFsZiBvZiB0aGUgb3V0c2V0cy4KKyAgICAgICAgb3V0c2V0VG9wID0gKG91dHNl
dFRvcCArIDEpIC8gMjsKKyAgICAgICAgb3V0c2V0UmlnaHQgPSAob3V0c2V0UmlnaHQgKyAxKSAv
IDI7CisgICAgICAgIG91dHNldEJvdHRvbSA9IChvdXRzZXRCb3R0b20gKyAxKSAvIDI7CisgICAg
ICAgIG91dHNldExlZnQgPSAob3V0c2V0TGVmdCArIDEpIC8gMjsKKyAgICAgICAgZXhwZWN0ZWRP
Y2NsdXNpb24gPSBJbnRSZWN0KDEwMCAvIDIgKyBvdXRzZXRSaWdodCAqIDIsIDEwMCAvIDIgKyBv
dXRzZXRCb3R0b20gKiAyLCA1MCAvIDIgLSAob3V0c2V0TGVmdCArIG91dHNldFJpZ2h0KSAqIDIs
IDUwIC8yIC0gKG91dHNldFRvcCArIG91dHNldEJvdHRvbSkgKiAyKTsKKworICAgICAgICBFWFBF
Q1RfRVFfUkVDVChleHBlY3RlZE9jY2x1c2lvbiwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKS5yZWN0cygpWzBdKTsKKyAgICB9Cit9OworCitBTExfQ0NPQ0NMVVNJT05UUkFDS0VS
X1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdFR3b0JhY2tncm91bmRGaWx0ZXJzUmVkdWNlT2Nj
bHVzaW9uVHdpY2UpOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+
CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JC
YWNrZ3JvdW5kRmlsdGVyV2l0aENsaXAgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxU
eXBlcywgb3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3QoKQor
ICAgIHsKKyAgICAgICAgLy8gTWFrZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUw
eDUwLCB0aGF0IGFyZSBjb21wbGV0ZWx5IHN1cnJvdW5kZWQgYnkgb3BhcXVlIGxheWVycyB3aGlj
aCBhcmUgYWJvdmUgdGhlbSBpbiB0aGUgei1vcmRlci4KKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6
OkNvbnRlbnRMYXllclR5cGUqIHBhcmVudCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAxNTApKTsKKyAgICAgICAg
Ly8gV2Ugc3RpY2sgdGhlIGZpbHRlcmVkIHN1cmZhY2UgaW5zaWRlIGEgY2xpcHBpbmcgc3VyZmFj
ZSBzbyB0aGF0IHdlIGNhbiBtYWtlIHN1cmUgdGhlIGNsaXAgaXMgaG9ub3JlZCB3aGVuIGV4cG9z
aW5nIHBpeGVscyBmb3IKKyAgICAgICAgLy8gdGhlIGJhY2tncm91bmQgZmlsdGVyLgorICAgICAg
ICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBjbGlwcGluZ1N1cmZhY2UgPSB0aGlzLT5jcmVh
dGVTdXJmYWNlKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoMzAwLCA3MCkpOworICAgICAgICBjbGlwcGluZ1N1cmZhY2UtPnNldE1hc2tzVG9C
b3VuZHModHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGZpbHRlcmVk
U3VyZmFjZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihjbGlwcGluZ1N1cmZhY2UsIHRoaXMt
PmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDUwLCA1MCksIEludFNpemUoNTAsIDUwKSwgZmFs
c2UpOworICAgICAgICB0aGlzLT5jcmVhdGVSZXBsaWNhTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCB0
aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgxNTAsIDApLCBJbnRTaXplKCkpOworICAg
ICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2NsdWRpbmdMYXllcjEgPSB0aGlzLT5j
cmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgzMDAsIDUwKSwgdHJ1ZSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyMiA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihw
YXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDEwMCksIEludFNpemUo
MzAwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvY2Ns
dWRpbmdMYXllcjMgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCA1MCksIEludFNpemUoNTAsIDUwKSwgdHJ1ZSk7Cisg
ICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIG9jY2x1ZGluZ0xheWVyNCA9IHRoaXMt
PmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDEwMCwgNTApLCBJbnRTaXplKDEwMCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5hbWUg
VHlwZXM6OkxheWVyVHlwZSogb2NjbHVkaW5nTGF5ZXI1ID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xh
eWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMjUwLCA1MCksIElu
dFNpemUoNTAsIDUwKSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRmlsdGVycyBtYWtlIHRoZSBsYXll
ciBvd24gYSBzdXJmYWNlLiBUaGlzIGZpbHRlciBpcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBnb2Vz
IG91dHNpZGUgdGhlIGJvdHRvbSBvZiB0aGUgY2xpcHBpbmdTdXJmYWNlLgorICAgICAgICBGaWx0
ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVu
ZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEyLCBXZWJDb3JlOjpGaXhlZCks
IEZpbHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBmaWx0ZXJlZFN1cmZhY2UtPnNldEJh
Y2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgICAgIC8vIFNhdmUgdGhlIGRpc3RhbmNl
IG9mIGluZmx1ZW5jZSBmb3IgdGhlIGJsdXIgZWZmZWN0LgorICAgICAgICBpbnQgb3V0c2V0VG9w
LCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRMZWZ0OworICAgICAgICBmaWx0ZXJz
LmdldE91dHNldHMob3V0c2V0VG9wLCBvdXRzZXRSaWdodCwgb3V0c2V0Qm90dG9tLCBvdXRzZXRM
ZWZ0KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXJXaXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBl
LCB0eXBlbmFtZSBUeXBlczo6UmVuZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAs
IDAsIDEwMDAsIDEwMDApKTsKKyAgICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAgICAgICAgLy8gVGhlc2UgbGF5ZXJzIG9j
Y2x1ZGUgcGl4ZWxzIGRpcmVjdGx5IGJlc2lkZSB0aGUgZmlsdGVyZWRTdXJmYWNlLiBCZWNhdXNl
IGZpbHRlcmVkIHN1cmZhY2UgYmxlbmRzIHBpeGVscyBpbiBhIHJhZGl1cywgaXQgd2lsbAorICAg
ICAgICAvLyBuZWVkIHRvIHNlZSBzb21lIG9mIHRoZSBwaXhlbHMgKHVwIHRvIHJhZGl1cyBmYXIp
IHVuZGVybmVhdGggdGhlIG9jY2x1ZGluZ0xheWVycy4KKyAgICAgICAgdGhpcy0+dmlzaXRMYXll
cihvY2NsdWRpbmdMYXllcjUsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIo
b2NjbHVkaW5nTGF5ZXI0LCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52aXNpdExheWVyKG9j
Y2x1ZGluZ0xheWVyMywgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihvY2Ns
dWRpbmdMYXllcjIsIG9jY2x1c2lvbik7CisgICAgICAgIHRoaXMtPnZpc2l0TGF5ZXIob2NjbHVk
aW5nTGF5ZXIxLCBvY2NsdXNpb24pOworCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MCwgMCwgMzAwLCAxNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5k
cygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5T
cGFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgw
LCAwLCAzMDAsIDE1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3Vu
ZHMoKSk7CisgICAgICAgIEVYUEVDVF9FUSg1dSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKKworICAgICAgICAvLyBFdmVyeXRoaW5nIG91dHNp
ZGUgdGhlIHN1cmZhY2UvcmVwbGljYSBpcyBvY2NsdWRlZCBidXQgdGhlIHN1cmZhY2UvcmVwbGlj
YSBpdHNlbGYgaXMgbm90LgorICAgICAgICB0aGlzLT5lbnRlckxheWVyKGZpbHRlcmVkU3VyZmFj
ZSwgb2NjbHVzaW9uKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxLCAwLCA0OSwg
NTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50
UmVjdCgxLCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwg
MSwgNTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChmaWx0ZXJlZFN1cmZh
Y2UsIEludFJlY3QoMCwgMSwgNTAsIDUwKSkpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDAsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoZmlsdGVy
ZWRTdXJmYWNlLCBJbnRSZWN0KC0xLCAwLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMCwgMCwgNTAsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChmaWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMCwgLTEsIDUwLCA1MCkpKTsKKworICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDE1MCArIDEsIDAsIDQ5LCA1MCksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDEsIDAsIDUw
LCA1MCkpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxNTAgKyAwLCAxLCA1MCwg
NDkpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGZpbHRlcmVkU3VyZmFjZSwgSW50
UmVjdCgxNTAgKyAwLCAxLCA1MCwgNTApKSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMTUwICsgMCwgMCwgNDksIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChm
aWx0ZXJlZFN1cmZhY2UsIEludFJlY3QoMTUwIC0gMSwgMCwgNTAsIDUwKSkpOworICAgICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDE1MCArIDAsIDAsIDUwLCA0OSksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QoZmlsdGVyZWRTdXJmYWNlLCBJbnRSZWN0KDE1MCArIDAsIC0xLCA1
MCwgNTApKSk7CisgICAgICAgIHRoaXMtPmxlYXZlTGF5ZXIoZmlsdGVyZWRTdXJmYWNlLCBvY2Ns
dXNpb24pOworCisgICAgICAgIC8vIFRoZSBmaWx0ZXJlZCBsYXllci9yZXBsaWNhIGRvZXMgbm90
IG9jY2x1ZGUuCisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTAp
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCku
c2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAwLCAwKSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDB1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5z
aXplKCkpOworCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGhhcyBhIGJhY2tncm91bmQgYmx1ciwg
c28gaXQgbmVlZHMgcGl4ZWxzIHRoYXQgYXJlIGN1cnJlbnRseSBjb25zaWRlcmVkIG9jY2x1ZGVk
IGluIG9yZGVyIHRvIGJlIGRyYXduLiBTbyB0aGUgcGl4ZWxzCisgICAgICAgIC8vIGl0IG5lZWRz
IHNob3VsZCBiZSByZW1vdmVkIHNvbWUgdGhlIG9jY2x1ZGVkIGFyZWEgc28gdGhhdCB3aGVuIHdl
IGdldCB0byB0aGUgcGFyZW50IHRoZXkgYXJlIGRyYXduLgorICAgICAgICB0aGlzLT52aXNpdENv
bnRyaWJ1dGluZ1N1cmZhY2UoZmlsdGVyZWRTdXJmYWNlLCBvY2NsdXNpb24pOworCisgICAgICAg
IHRoaXMtPmVudGVyQ29udHJpYnV0aW5nU3VyZmFjZShjbGlwcGluZ1N1cmZhY2UsIG9jY2x1c2lv
bik7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMCwgMCwgMzAwLCAxNTApLCBvY2Ns
dXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDV1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKKworICAgICAgICBJbnRSZWN0IG91dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgY2xpcHBl
ZE91dHNldFJlY3Q7CisgICAgICAgIEludFJlY3QgdGVzdFJlY3Q7CisKKyAgICAgICAgLy8gTm90
aGluZyBpbiB0aGUgKGNsaXBwZWQpIGJsdXIgb3V0c2V0cyBmb3IgdGhlIGZpbHRlcmVkU3VyZmFj
ZSBpcyBvY2NsdWRlZC4KKyAgICAgICAgb3V0c2V0UmVjdCA9IEludFJlY3QoNTAgLSBvdXRzZXRM
ZWZ0LCA1MCAtIG91dHNldFRvcCwgNTAgKyBvdXRzZXRMZWZ0ICsgb3V0c2V0UmlnaHQsIDUwICsg
b3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICAgICAgY2xpcHBlZE91dHNldFJlY3QgPSBp
bnRlcnNlY3Rpb24ob3V0c2V0UmVjdCwgSW50UmVjdCgwIC0gb3V0c2V0TGVmdCwgMCAtIG91dHNl
dFRvcCwgMzAwICsgb3V0c2V0TGVmdCArIG91dHNldFJpZ2h0LCA3MCArIG91dHNldFRvcCArIG91
dHNldEJvdHRvbSkpOworICAgICAgICB0ZXN0UmVjdCA9IG91dHNldFJlY3Q7CisgICAgICAgIEVY
UEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKworICAgICAgICAvLyBTdHVmZiBv
dXRzaWRlIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRzIGlzIHN0aWxsIG9jY2x1ZGVkIHRob3Vn
aC4KKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBh
bmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsK
KyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQo
MCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAg
ICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAgICAgICB0ZXN0UmVjdC5tb3ZlKC0xLCAw
KTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDApOworICAgICAgICBFWFBFQ1RfRVFfUkVD
VChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjbGlw
cGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAgIHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsK
KyAgICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7CisgICAgICAgIHRlc3RSZWN0LmV4cGFuZCgw
LCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xpcHBlZE91dHNldFJlY3QsIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdTdXJmYWNlLCB0ZXN0UmVjdCkpOworCisg
ICAgICAgIC8vIE5vdGhpbmcgaW4gdGhlIChjbGlwcGVkKSBibHVyIG91dHNldHMgZm9yIHRoZSBm
aWx0ZXJlZFN1cmZhY2UncyByZXBsaWNhIGlzIG9jY2x1ZGVkLgorICAgICAgICBvdXRzZXRSZWN0
ID0gSW50UmVjdCgyMDAgLSBvdXRzZXRMZWZ0LCA1MCAtIG91dHNldFRvcCwgNTAgKyBvdXRzZXRM
ZWZ0ICsgb3V0c2V0UmlnaHQsIDUwICsgb3V0c2V0VG9wICsgb3V0c2V0Qm90dG9tKTsKKyAgICAg
ICAgY2xpcHBlZE91dHNldFJlY3QgPSBpbnRlcnNlY3Rpb24ob3V0c2V0UmVjdCwgSW50UmVjdCgw
IC0gb3V0c2V0TGVmdCwgMCAtIG91dHNldFRvcCwgMzAwICsgb3V0c2V0TGVmdCArIG91dHNldFJp
Z2h0LCA3MCArIG91dHNldFRvcCArIG91dHNldEJvdHRvbSkpOworICAgICAgICB0ZXN0UmVjdCA9
IG91dHNldFJlY3Q7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNsaXBwZWRPdXRzZXRSZWN0LCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5nU3VyZmFjZSwgdGVzdFJlY3Qp
KTsKKworICAgICAgICAvLyBTdHVmZiBvdXRzaWRlIHRoZSAoY2xpcHBlZCkgYmx1ciBvdXRzZXRz
IGlzIHN0aWxsIG9jY2x1ZGVkIHRob3VnaC4KKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0
OworICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMSwgMCk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNU
KGNsaXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBw
aW5nU3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0Owor
ICAgICAgICB0ZXN0UmVjdC5leHBhbmQoMCwgMSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGNs
aXBwZWRPdXRzZXRSZWN0LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNsaXBwaW5n
U3VyZmFjZSwgdGVzdFJlY3QpKTsKKyAgICAgICAgdGVzdFJlY3QgPSBvdXRzZXRSZWN0OworICAg
ICAgICB0ZXN0UmVjdC5tb3ZlKC0xLCAwKTsKKyAgICAgICAgdGVzdFJlY3QuZXhwYW5kKDEsIDAp
OworICAgICAgICBFWFBFQ1RfRVFfUkVDVChjbGlwcGVkT3V0c2V0UmVjdCwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChjbGlwcGluZ1N1cmZhY2UsIHRlc3RSZWN0KSk7CisgICAgICAg
IHRlc3RSZWN0ID0gb3V0c2V0UmVjdDsKKyAgICAgICAgdGVzdFJlY3QubW92ZSgwLCAtMSk7Cisg
ICAgICAgIHRlc3RSZWN0LmV4cGFuZCgwLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoY2xp
cHBlZE91dHNldFJlY3QsIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2xpcHBpbmdT
dXJmYWNlLCB0ZXN0UmVjdCkpOworICAgIH0KK307CisKK0FMTF9DQ09DQ0xVU0lPTlRSQUNLRVJf
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udE9jY2x1ZGVQaXhlbHNOZWVkZWRGb3JCYWNr
Z3JvdW5kRmlsdGVyV2l0aENsaXApOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFx
dWVMYXllcnM+CitjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lv
bkJlbG93QmFja2dyb3VuZEZpbHRlciA6IHB1YmxpYyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0PFR5
cGVzLCBvcGFxdWVMYXllcnM+IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHJ1bk15VGVzdCgpCisg
ICAgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZUJ5SGFsZjsKKyAgICAgICAg
c2NhbGVCeUhhbGYuc2NhbGUoMC41KTsKKworICAgICAgICAvLyBNYWtlIGEgc3VyZmFjZSBhbmQg
aXRzIHJlcGxpY2EsIGVhY2ggNTB4NTAsIHdpdGggYSBzbWFsbGVyIDMweDMwIGxheWVyIGNlbnRl
cmVkIGJlbG93IGVhY2guCisgICAgICAgIC8vIFRoZSBzdXJmYWNlIGlzIHNjYWxlZCB0byB0ZXN0
IHRoYXQgdGhlIHBpeGVsIG1vdmluZyBpcyBkb25lIGluIHRoZSB0YXJnZXQgc3BhY2UsIHdoZXJl
IHRoZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBhcHBsaWVkLCBidXQgdGhlIHN1cmZhY2UKKyAgICAg
ICAgLy8gYXBwZWFycyBhdCA1MCwgNTAgYW5kIHRoZSByZXBsaWNhIGF0IDIwMCwgNTAuCisgICAg
ICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVh
dGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMw
MCwgMTUwKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGJlaGluZFN1cmZh
Y2VMYXllciA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDYwLCA2MCksIEludFNpemUoMzAsIDMwKSwgdHJ1ZSk7CisgICAg
ICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGJlaGluZFJlcGxpY2FMYXllciA9IHRoaXMt
PmNyZWF0ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDIxMCwgNjApLCBJbnRTaXplKDMwLCAzMCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBU
eXBlczo6TGF5ZXJUeXBlKiBmaWx0ZXJlZFN1cmZhY2UgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5
ZXIocGFyZW50LCBzY2FsZUJ5SGFsZiwgRmxvYXRQb2ludCg1MCwgNTApLCBJbnRTaXplKDEwMCwg
MTAwKSwgZmFsc2UpOworICAgICAgICB0aGlzLT5jcmVhdGVSZXBsaWNhTGF5ZXIoZmlsdGVyZWRT
dXJmYWNlLCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgzMDAsIDApLCBJbnRTaXpl
KCkpOworCisgICAgICAgIC8vIEZpbHRlcnMgbWFrZSB0aGUgbGF5ZXIgb3duIGEgc3VyZmFjZS4K
KyAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBmaWx0ZXJzLm9wZXJh
dGlvbnMoKS5hcHBlbmQoQmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgzLCBXZWJD
b3JlOjpGaXhlZCksIEZpbHRlck9wZXJhdGlvbjo6QkxVUikpOworICAgICAgICBmaWx0ZXJlZFN1
cmZhY2UtPnNldEJhY2tncm91bmRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgICAgIHRoaXMtPmNh
bGNEcmF3RXRjKHBhcmVudCk7CisKKyAgICAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcldpdGhT
Y2lzc29yPHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUsIHR5cGVuYW1lIFR5cGVzOjpSZW5kZXJT
dXJmYWNlVHlwZT4gb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgICAg
ICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDAp
KTsKKworICAgICAgICAvLyBUaGUgc3VyZmFjZSBoYXMgYSBiYWNrZ3JvdW5kIGJsdXIsIHNvIGl0
IGJsdXJzIG5vbi1vcGFxdWUgcGl4ZWxzIGJlbG93IGl0LgorICAgICAgICB0aGlzLT52aXNpdExh
eWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRDb250
cmlidXRpbmdTdXJmYWNlKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKworICAgICAgICB0
aGlzLT52aXNpdExheWVyKGJlaGluZFJlcGxpY2FMYXllciwgb2NjbHVzaW9uKTsKKyAgICAgICAg
dGhpcy0+dmlzaXRMYXllcihiZWhpbmRTdXJmYWNlTGF5ZXIsIG9jY2x1c2lvbik7CisKKyAgICAg
ICAgLy8gVGhlIGxheWVycyBiZWhpbmQgdGhlIHN1cmZhY2UgYXJlIG5vdCBibHVycmVkLCBhbmQg
dGhlaXIgb2NjbHVzaW9uIGRvZXMgbm90IGNoYW5nZSwgdW50aWwgd2UgbGVhdmUgdGhlIHN1cmZh
Y2UuCisgICAgICAgIC8vIFNvIGl0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGZpbHRl
ciBoZXJlLgorICAgICAgICBJbnRSZWN0IG9jY2x1c2lvbkJlaGluZFN1cmZhY2UgPSBJbnRSZWN0
KDYwLCA2MCwgMzAsIDMwKTsKKyAgICAgICAgSW50UmVjdCBvY2NsdXNpb25CZWhpbmRSZXBsaWNh
ID0gSW50UmVjdCgyMTAsIDYwLCAzMCwgMzApOworCisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRP
cGFxdWVCb3VuZHMgPSB1bmlvblJlY3Qob2NjbHVzaW9uQmVoaW5kU3VyZmFjZSwgb2NjbHVzaW9u
QmVoaW5kUmVwbGljYSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGV4cGVjdGVkT3BhcXVlQm91
bmRzLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDJ1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRX1JFQ1QoZXhwZWN0ZWRPcGFxdWVCb3VuZHMs
IG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5ib3VuZHMoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3Rz
KCkuc2l6ZSgpKTsKKyAgICB9Cit9OworCitBTExfQ0NPQ0NMVVNJT05UUkFDS0VSX1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdERvbnRSZWR1Y2VPY2NsdXNpb25CZWxvd0JhY2tncm91bmRGaWx0
ZXIpOworCit0ZW1wbGF0ZTxjbGFzcyBUeXBlcywgYm9vbCBvcGFxdWVMYXllcnM+CitjbGFzcyBD
Q09jY2x1c2lvblRyYWNrZXJUZXN0RG9udFJlZHVjZU9jY2x1c2lvbklmQmFja2dyb3VuZEZpbHRl
cklzT2NjbHVkZWQgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBlcywgb3BhcXVl
TGF5ZXJzPiB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3QoKQorICAgIHsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVCeUhhbGY7CisgICAgICAgIHNjYWxlQnlIYWxm
LnNjYWxlKDAuNSk7CisKKyAgICAgICAgLy8gTWFrZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNh
LCBlYWNoIDUweDUwLCB0aGF0IGFyZSBjb21wbGV0ZWx5IG9jY2x1ZGVkIGJ5IG9wYXF1ZSBsYXll
cnMgd2hpY2ggYXJlIGFib3ZlIHRoZW0gaW4gdGhlIHotb3JkZXIuCisgICAgICAgIC8vIFRoZSBz
dXJmYWNlIGlzIHNjYWxlZCB0byB0ZXN0IHRoYXQgdGhlIHBpeGVsIG1vdmluZyBpcyBkb25lIGlu
IHRoZSB0YXJnZXQgc3BhY2UsIHdoZXJlIHRoZSBiYWNrZ3JvdW5kIGZpbHRlciBpcyBhcHBsaWVk
LCBidXQgdGhlIHN1cmZhY2UKKyAgICAgICAgLy8gYXBwZWFycyBhdCA1MCwgNTAgYW5kIHRoZSBy
ZXBsaWNhIGF0IDIwMCwgNTAuCisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJU
eXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMTUwKSk7CisgICAgICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIGZpbHRlcmVkU3VyZmFjZSA9IHRoaXMtPmNyZWF0ZURyYXdpbmdMYXllcihw
YXJlbnQsIHNjYWxlQnlIYWxmLCBGbG9hdFBvaW50KDUwLCA1MCksIEludFNpemUoMTAwLCAxMDAp
LCBmYWxzZSk7CisgICAgICAgIHRoaXMtPmNyZWF0ZVJlcGxpY2FMYXllcihmaWx0ZXJlZFN1cmZh
Y2UsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDMwMCwgMCksIEludFNpemUoKSk7
CisgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGFib3ZlU3VyZmFjZUxheWVyID0g
dGhpcy0+Y3JlYXRlRHJhd2luZ0xheWVyKHBhcmVudCwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoNTAsIDUwKSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsKKyAgICAgICAgdHlwZW5h
bWUgVHlwZXM6OkxheWVyVHlwZSogYWJvdmVSZXBsaWNhTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3
aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyMDAsIDUw
KSwgSW50U2l6ZSg1MCwgNTApLCB0cnVlKTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhl
IGxheWVyIG93biBhIHN1cmZhY2UuCisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsK
KyAgICAgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246
OmNyZWF0ZShMZW5ndGgoMywgV2ViQ29yZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIp
KTsKKyAgICAgICAgZmlsdGVyZWRTdXJmYWNlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJz
KTsKKworICAgICAgICB0aGlzLT5jYWxjRHJhd0V0YyhwYXJlbnQpOworCisgICAgICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXJXaXRoU2Npc3Nvcjx0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlLCB0
eXBlbmFtZSBUeXBlczo6UmVuZGVyU3VyZmFjZVR5cGU+IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAs
IDEwMDAsIDEwMDApKTsKKyAgICAgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihhYm92
ZVJlcGxpY2FMYXllciwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRMYXllcihhYm92
ZVN1cmZhY2VMYXllciwgb2NjbHVzaW9uKTsKKworICAgICAgICAvLyBUaGUgc3VyZmFjZSBoYXMg
YSBiYWNrZ3JvdW5kIGJsdXIsIHNvIGl0IGJsdXJzIG5vbi1vcGFxdWUgcGl4ZWxzIGJlbG93IGl0
LgorICAgICAgICB0aGlzLT52aXNpdExheWVyKGZpbHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsK
KyAgICAgICAgdGhpcy0+dmlzaXRDb250cmlidXRpbmdTdXJmYWNlKGZpbHRlcmVkU3VyZmFjZSwg
b2NjbHVzaW9uKTsKKworICAgICAgICAvLyBUaGUgZmlsdGVyIGlzIGNvbXBsZXRlbHkgb2NjbHVk
ZWQsIHNvIGl0IHNob3VsZCBub3QgYmx1ciBhbnl0aGluZyBhbmQgcmVkdWNlIGFueSBvY2NsdXNp
b24uCisgICAgICAgIEludFJlY3Qgb2NjbHVzaW9uQWJvdmVTdXJmYWNlID0gSW50UmVjdCg1MCwg
NTAsIDUwLCA1MCk7CisgICAgICAgIEludFJlY3Qgb2NjbHVzaW9uQWJvdmVSZXBsaWNhID0gSW50
UmVjdCgyMDAsIDUwLCA1MCwgNTApOworCisgICAgICAgIEludFJlY3QgZXhwZWN0ZWRPcGFxdWVC
b3VuZHMgPSB1bmlvblJlY3Qob2NjbHVzaW9uQWJvdmVTdXJmYWNlLCBvY2NsdXNpb25BYm92ZVJl
cGxpY2EpOworICAgICAgICBFWFBFQ1RfRVFfUkVDVChleHBlY3RlZE9wYXF1ZUJvdW5kcywgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CisgICAgICAgIEVYUEVD
VF9FUSgydSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpLnNpemUo
KSk7CisgICAgICAgIEVYUEVDVF9FUV9SRUNUKGV4cGVjdGVkT3BhcXVlQm91bmRzLCBvY2NsdXNp
b24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkuYm91bmRzKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMnUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUo
KSk7CisgICAgfQorfTsKKworQUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3REb250UmVkdWNlT2NjbHVzaW9uSWZCYWNrZ3JvdW5kRmlsdGVySXNPY2NsdWRl
ZCk7CisKK3RlbXBsYXRlPGNsYXNzIFR5cGVzLCBib29sIG9wYXF1ZUxheWVycz4KK2NsYXNzIEND
T2NjbHVzaW9uVHJhY2tlclRlc3RSZWR1Y2VPY2NsdXNpb25XaGVuQmFja2dyb3VuZEZpbHRlcklz
UGFydGlhbGx5T2NjbHVkZWQgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBlcywg
b3BhcXVlTGF5ZXJzPiB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5NeVRlc3QoKQorICAgIHsK
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVCeUhhbGY7CisgICAgICAgIHNjYWxl
QnlIYWxmLnNjYWxlKDAuNSk7CisKKyAgICAgICAgLy8gTWFrZSBhIHN1cmZhY2UgYW5kIGl0cyBy
ZXBsaWNhLCBlYWNoIDUweDUwLCB0aGF0IGFyZSBwYXJ0aWFsbHkgb2NjbHVkZWQgYnkgb3BhcXVl
IGxheWVycyB3aGljaCBhcmUgYWJvdmUgdGhlbSBpbiB0aGUgei1vcmRlci4KKyAgICAgICAgLy8g
VGhlIHN1cmZhY2UgaXMgc2NhbGVkIHRvIHRlc3QgdGhhdCB0aGUgcGl4ZWwgbW92aW5nIGlzIGRv
bmUgaW4gdGhlIHRhcmdldCBzcGFjZSwgd2hlcmUgdGhlIGJhY2tncm91bmQgZmlsdGVyIGlzIGFw
cGxpZWQsIGJ1dCB0aGUgc3VyZmFjZQorICAgICAgICAvLyBhcHBlYXJzIGF0IDUwLCA1MCBhbmQg
dGhlIHJlcGxpY2EgYXQgMjAwLCA1MC4KKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkNvbnRlbnRM
YXllclR5cGUqIHBhcmVudCA9IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAxNTApKTsKKyAgICAgICAgdHlwZW5hbWUg
VHlwZXM6OkxheWVyVHlwZSogZmlsdGVyZWRTdXJmYWNlID0gdGhpcy0+Y3JlYXRlRHJhd2luZ0xh
eWVyKHBhcmVudCwgc2NhbGVCeUhhbGYsIEZsb2F0UG9pbnQoNTAsIDUwKSwgSW50U2l6ZSgxMDAs
IDEwMCksIGZhbHNlKTsKKyAgICAgICAgdGhpcy0+Y3JlYXRlUmVwbGljYUxheWVyKGZpbHRlcmVk
U3VyZmFjZSwgdGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMzAwLCAwKSwgSW50U2l6
ZSgpKTsKKyAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogYWJvdmVTdXJmYWNlTGF5
ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCg3MCwgNTApLCBJbnRTaXplKDMwLCA1MCksIHRydWUpOworICAgICAgICB0
eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBhYm92ZVJlcGxpY2FMYXllciA9IHRoaXMtPmNyZWF0
ZURyYXdpbmdMYXllcihwYXJlbnQsIHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDIw
MCwgNTApLCBJbnRTaXplKDMwLCA1MCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6
TGF5ZXJUeXBlKiBiZXNpZGVTdXJmYWNlTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIo
cGFyZW50LCB0aGlzLT5pZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCg5MCwgNDApLCBJbnRTaXpl
KDEwLCAxMCksIHRydWUpOworICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBiZXNp
ZGVSZXBsaWNhTGF5ZXIgPSB0aGlzLT5jcmVhdGVEcmF3aW5nTGF5ZXIocGFyZW50LCB0aGlzLT5p
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgyMDAsIDQwKSwgSW50U2l6ZSgxMCwgMTApLCB0cnVl
KTsKKworICAgICAgICAvLyBGaWx0ZXJzIG1ha2UgdGhlIGxheWVyIG93biBhIHN1cmZhY2UuCisg
ICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgZmlsdGVycy5vcGVyYXRp
b25zKCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMywgV2ViQ29y
ZTo6Rml4ZWQpLCBGaWx0ZXJPcGVyYXRpb246OkJMVVIpKTsKKyAgICAgICAgZmlsdGVyZWRTdXJm
YWNlLT5zZXRCYWNrZ3JvdW5kRmlsdGVycyhmaWx0ZXJzKTsKKworICAgICAgICAvLyBTYXZlIHRo
ZSBkaXN0YW5jZSBvZiBpbmZsdWVuY2UgZm9yIHRoZSBibHVyIGVmZmVjdC4KKyAgICAgICAgaW50
IG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRvbSwgb3V0c2V0TGVmdDsKKyAgICAg
ICAgZmlsdGVycy5nZXRPdXRzZXRzKG91dHNldFRvcCwgb3V0c2V0UmlnaHQsIG91dHNldEJvdHRv
bSwgb3V0c2V0TGVmdCk7CisKKyAgICAgICAgdGhpcy0+Y2FsY0RyYXdFdGMocGFyZW50KTsKKwor
ICAgICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyV2l0aFNjaXNzb3I8dHlwZW5hbWUgVHlwZXM6
OkxheWVyVHlwZSwgdHlwZW5hbWUgVHlwZXM6OlJlbmRlclN1cmZhY2VUeXBlPiBvY2NsdXNpb24o
SW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgICAgIG9jY2x1c2lvbi5zZXRMYXllclNj
aXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAgICAgIHRoaXMtPnZp
c2l0TGF5ZXIoYmVzaWRlUmVwbGljYUxheWVyLCBvY2NsdXNpb24pOworICAgICAgICB0aGlzLT52
aXNpdExheWVyKGJlc2lkZVN1cmZhY2VMYXllciwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+
dmlzaXRMYXllcihhYm92ZVJlcGxpY2FMYXllciwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+
dmlzaXRMYXllcihhYm92ZVN1cmZhY2VMYXllciwgb2NjbHVzaW9uKTsKKworICAgICAgICAvLyBU
aGUgc3VyZmFjZSBoYXMgYSBiYWNrZ3JvdW5kIGJsdXIsIHNvIGl0IGJsdXJzIG5vbi1vcGFxdWUg
cGl4ZWxzIGJlbG93IGl0LgorICAgICAgICB0aGlzLT52aXNpdExheWVyKGZpbHRlcmVkU3VyZmFj
ZSwgb2NjbHVzaW9uKTsKKyAgICAgICAgdGhpcy0+dmlzaXRDb250cmlidXRpbmdTdXJmYWNlKGZp
bHRlcmVkU3VyZmFjZSwgb2NjbHVzaW9uKTsKKworICAgICAgICAvLyBUaGUgZmlsdGVyIGluIHRo
ZSBzdXJmYWNlIGFuZCByZXBsaWNhIGFyZSBwYXJ0aWFsbHkgdW5vY2NsdWRlZC4gT25seSB0aGUg
dW5vY2NsdWRlZCBwYXJ0cyBzaG91bGQgcmVkdWNlIG9jY2x1c2lvbi4KKyAgICAgICAgLy8gVGhp
cyBtZWFucyBpdCB3aWxsIHB1c2ggYmFjayB0aGUgb2NjbHVzaW9uIHRoYXQgdG91Y2hlcyB0aGUg
dW5vY2NsdWRlZCBwYXJ0IChvY2NsdXNpb25BYm92ZV9fXyksIGJ1dCBpdCB3aWxsIG5vdAorICAg
ICAgICAvLyB0b3VjaCBvY2NsdXNpb25CZXNpZGVfX19fIHNpbmNlIHRoYXQgaXMgbm90IGJlc2lk
ZSB0aGUgdW5vY2NsdWRlZCBwYXJ0IG9mIHRoZSBzdXJmYWNlLCBldmVuIHRob3VnaCBpdCBpcyBi
ZXNpZGUKKyAgICAgICAgLy8gdGhlIG9jY2x1ZGVkIHBhcnQgb2YgdGhlIHN1cmZhY2UuCisgICAg
ICAgIEludFJlY3Qgb2NjbHVzaW9uQWJvdmVTdXJmYWNlID0gSW50UmVjdCg3MCArIG91dHNldFJp
Z2h0LCA1MCwgMzAgLSBvdXRzZXRSaWdodCwgNTApOworICAgICAgICBJbnRSZWN0IG9jY2x1c2lv
bkFib3ZlUmVwbGljYSA9IEludFJlY3QoMjAwLCA1MCwgMzAgLSBvdXRzZXRMZWZ0LCA1MCk7Cisg
ICAgICAgIEludFJlY3Qgb2NjbHVzaW9uQmVzaWRlU3VyZmFjZSA9IEludFJlY3QoOTAsIDQwLCAx
MCwgMTApOworICAgICAgICBJbnRSZWN0IG9jY2x1c2lvbkJlc2lkZVJlcGxpY2EgPSBJbnRSZWN0
KDIwMCwgNDAsIDEwLCAxMCk7CisKKyAgICAgICAgUmVnaW9uIGV4cGVjdGVkT2NjbHVzaW9uOwor
ICAgICAgICBleHBlY3RlZE9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25BYm92ZVN1cmZhY2UpOwor
ICAgICAgICBleHBlY3RlZE9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25BYm92ZVJlcGxpY2EpOwor
ICAgICAgICBleHBlY3RlZE9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25CZXNpZGVTdXJmYWNlKTsK
KyAgICAgICAgZXhwZWN0ZWRPY2NsdXNpb24udW5pdGUob2NjbHVzaW9uQmVzaWRlUmVwbGljYSk7
CisKKyAgICAgICAgQVNTRVJUX0VRKGV4cGVjdGVkT2NjbHVzaW9uLnJlY3RzKCkuc2l6ZSgpLCBv
Y2NsdXNpb24ub2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOworICAg
ICAgICBBU1NFUlRfRVEoZXhwZWN0ZWRPY2NsdXNpb24ucmVjdHMoKS5zaXplKCksIG9jY2x1c2lv
bi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkucmVjdHMoKS5zaXplKCkpOworCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhwZWN0ZWRPY2NsdXNpb24ucmVjdHMoKS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgSW50UmVjdCBleHBlY3RlZFJlY3QgPSBleHBlY3RlZE9jY2x1c2lv
bi5yZWN0cygpW2ldOworICAgICAgICAgICAgSW50UmVjdCBzY3JlZW5SZWN0ID0gb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5yZWN0cygpW2ldOworICAgICAgICAgICAgSW50UmVj
dCB0YXJnZXRSZWN0ID0gb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3Rz
KClbaV07CisgICAgICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRSZWN0LCBzY3JlZW5SZWN0KTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFJlY3QsIHRhcmdldFJlY3QpOworICAgICAg
ICB9CisgICAgfQorfTsKKworQUxMX0NDT0NDTFVTSU9OVFJBQ0tFUl9URVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3RSZWR1Y2VPY2NsdXNpb25XaGVuQmFja2dyb3VuZEZpbHRlcklzUGFydGlhbGx5
T2NjbHVkZWQpOworCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>