<?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>79927</bug_id>
          
          <creation_ts>2012-02-29 11:12:30 -0800</creation_ts>
          <short_desc>[chromium] Add clipping to scissor rect to CCOcclusionTracker</short_desc>
          <delta_ts>2012-03-07 18:36:09 -0800</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>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>567754</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-29 11:12:30 -0800</bug_when>
    <thetext>[chromium] Add clipping to scissor rect to CCOcclusionTracker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567765</commentid>
    <comment_count>1</comment_count>
      <attachid>129481</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-29 11:19:46 -0800</bug_when>
    <thetext>Created attachment 129481
Patch

Adds new unit tests for CCOcclusionTracker, for the scenarios tested wrt using scissor rect in CCQuadCullerTest.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567856</commentid>
    <comment_count>2</comment_count>
      <attachid>129481</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-29 13:05:09 -0800</bug_when>
    <thetext>Comment on attachment 129481
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:298
&gt; +    const FloatRect&amp; clipRect = currentDamageRect(m_stack.last().surface);

I think the clip rect here should include an explicit scissor.  The mapping of surface scissor into layer space ends up being conservative, so it seems possible to me that the union of scissor + occlusion could hide a quad.  We might as well do that in this patch if you&apos;re going to add logic for damage rects as well.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:348
&gt; +FloatRect CCOcclusionTrackerBase&lt;LayerType, RenderSurfaceType&gt;::currentDamageRect(const RenderSurfaceChromium* /* surface */) const
&gt; +{
&gt; +    return FloatRect();
&gt; +}
&gt; +
&gt; +template&lt;typename LayerType, typename RenderSurfaceType&gt;
&gt; +FloatRect CCOcclusionTrackerBase&lt;LayerType, RenderSurfaceType&gt;::currentDamageRect(const CCRenderSurface* surface) const
&gt; +{
&gt; +    return surface-&gt;damageTracker()-&gt;currentDamageRect();
&gt; +}
&gt; +

Design quibble: I think these functions would be better suited to live on RenderSurfaceType.  If you did that, then rather than having to push a boolean for &quot;am I caring about damage rects?&quot; all the way through CCOcclusionTracker*, you could simply ask the surface &quot;what&apos;s your current scissor?&quot; (including clip rect and damage, if enabled) and use that to intersect occlusion queries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567866</commentid>
    <comment_count>3</comment_count>
      <attachid>129481</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-29 13:25:12 -0800</bug_when>
    <thetext>Comment on attachment 129481
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:298
&gt;&gt; +    const FloatRect&amp; clipRect = currentDamageRect(m_stack.last().surface);
&gt; 
&gt; I think the clip rect here should include an explicit scissor.  The mapping of surface scissor into layer space ends up being conservative, so it seems possible to me that the union of scissor + occlusion could hide a quad.  We might as well do that in this patch if you&apos;re going to add logic for damage rects as well.

Sorry to use confusing language.  By explicit scissor, I mean &quot;clip rect on the surface&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567875</commentid>
    <comment_count>4</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-02-29 13:32:26 -0800</bug_when>
    <thetext>(1)  One minor nit on my part.  As far as I understand, it should be consistent with Enne&apos;s feedback too.

The naming conventions I thought we had (in fact, we renamed the old scissorRect to clipRect to clear up this exact confusion):
  clip rect - reserved for actual overflow/maskToBounds clipping
  damage rect - the rect that encloses what really has changed
  scissor rect - the actual rect that limits the draw/paint region, an intersection of clip and damage.

If this sounds OK, then there may be a few places in code to change:
- the bug title on the changelog, perhaps should say damage instead of scissor?
- various locations where the word &quot;clip&quot; is used


(2)  I wouldn&apos;t be surprised if, after accounting for Enne&apos;s idea, that it may be appropriate to create a helper function that does it in general, since that pattern of (clipRect or damage or clip intersect damage) has cropped up in multiple places in code.  OK with me if we leave that for another patch, as long as a bug is created to track it =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567879</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-02-29 13:35:19 -0800</bug_when>
    <thetext>
&gt; 
&gt; (2)  I wouldn&apos;t be surprised if, after accounting for Enne&apos;s idea, that it may be appropriate to create a helper function that does it in general, since that pattern of (clipRect or damage or clip intersect damage) has cropped up in multiple places in code.  OK with me if we leave that for another patch, as long as a bug is created to track it =)

Just realized this is redundant with what Enne said.  I like Enne&apos;s proposed way of doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568247</commentid>
    <comment_count>6</comment_count>
      <attachid>129618</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-29 19:42:33 -0800</bug_when>
    <thetext>Created attachment 129618
Patch

- Moved the computation of the surface scissor rect over to RenderSurface*.
- Fixed naming of scissor/damage/clip.
- Removed the &quot;bool clip&quot; parameter passed around to the static inline functions.

Making a CCFloatScissorRect that can be infinite cleans up this CL a whole lot. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568257</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-29 19:54:33 -0800</bug_when>
    <thetext>&quot;scissor&quot; makes me think of glScissor, which has to be integer so at first blush CCFloatScissorRect is pretty confusing.  Is being infinite the only thing we want to get out of being floating point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568266</commentid>
    <comment_count>8</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-29 20:02:03 -0800</bug_when>
    <thetext>Yeh I just want a rect class that can be infinite.

Ultimately it&apos;s for dealing with damage and scissoring, but I have a float version because currentDamageRect() gives a FloatRect. You&apos;re right about where the name came from though.

The point of it is to be able to do stuff like

enclosingIntRect(intersection(someFloatRect, aPossiblyInfiniteFloatRect))

without needing 4 or 5 lines of code, and to avoid having to pass around pairs of rects and bools all over the place.

It could be something more general like CCFloatInfiniteRect? I&apos;m not thinking of anything overly clever at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568282</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-29 20:26:32 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Yeh I just want a rect class that can be infinite.

Maybe I&apos;m missing something, but why do we need a rect class that can be infinite? In all cases, a surface has a content rect.  Can RenderSurfaceType::scissorRect() use the surface&apos;s content rect as the initial scissor rect before intersecting with clip or damage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568290</commentid>
    <comment_count>10</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-29 20:41:15 -0800</bug_when>
    <thetext>Yep it can. The hassle becomes visible when you conside the CCOcclusionTracker::scissorRectInScreenSpace(). 

This rect can exist or not (ie infinite for intersections). All the helper functions to compute occlusion would need to take bool+rect to handle the screen space scissor, or be duplicated with scissor/non-scissor versions. I tried variations of each of these today and this was the cleanest version I thot by far, since it allows intersect() to simply be a noop at the right times. Rather than
m_hasScissorRectInScreenSpace
m_scissorRectInScreenSpace

This same hassle was duplicated for me when making the existing unit tests - which expect no scissoring - continue to pass. Enabling scissoring made the existing tests much less useful.

Those are the reasons I thot to propose this class.

It&apos;s also possible to make the class inside CCOcclusionTracker. But I thot it might do a good job of cleaning up other scissor rect code, and let me make unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568332</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-29 21:48:27 -0800</bug_when>
    <thetext>In terms of naming, I realized what it is. It&apos;s more or less a MaybeRect (via Haskell&apos;s Maybe). It would probably be best to stick it inside the CCOcclusionTracker class, and pull it out only if needed in the future. I&apos;ll throw up a CL like that tomorrow morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568683</commentid>
    <comment_count>12</comment_count>
      <attachid>129711</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-01 08:35:15 -0800</bug_when>
    <thetext>Created attachment 129711
Patch

Erg. If the MaybeRect class is contained inside CCOcclusionTracker, then the helper methods can&apos;t be static inline functions, they have to join the class to see the data type. How about CCMaybeRect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568685</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 08:37:59 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568687</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 08:38:51 -0800</bug_when>
    <thetext>Attachment 129711 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;La...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h&quot;
Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 197 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568688</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-01 08:40:52 -0800</bug_when>
    <thetext>Bots are going crazy..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568741</commentid>
    <comment_count>16</comment_count>
      <attachid>129711</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 10:00:18 -0800</bug_when>
    <thetext>Comment on attachment 129711
Patch

Attachment 129711 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11757529

New failing tests:
fast/workers/storage/use-same-database-in-page-and-workers.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568864</commentid>
    <comment_count>17</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-01 13:31:06 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Yep it can. The hassle becomes visible when you conside the CCOcclusionTracker::scissorRectInScreenSpace(). 
&gt; 
&gt; This rect can exist or not (ie infinite for intersections).

Forgive me for being dense, but when do you not have a finite scissor rect in screen space, in practice? It&apos;s not clear from the patch where that would happen in practice, since this value is only set directly (or not) in tests.

Also, does the occlusion tracker have to know about the damage tracking setting? In other words, how hard is it to change scissorRect(bool) =&gt; scissorRect()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568870</commentid>
    <comment_count>18</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-01 13:37:02 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #10)
&gt; &gt; Yep it can. The hassle becomes visible when you conside the CCOcclusionTracker::scissorRectInScreenSpace(). 
&gt; &gt; 
&gt; &gt; This rect can exist or not (ie infinite for intersections).
&gt; 
&gt; Forgive me for being dense, but when do you not have a finite scissor rect in screen space, in practice? It&apos;s not clear from the patch where that would happen in practice, since this value is only set directly (or not) in tests.

Hm I guess we could use IntRect(IntPoint(), CCLTHI::m_viewportSize) here? If so, lemme see about that.

&gt; Also, does the occlusion tracker have to know about the damage tracking setting? In other words, how hard is it to change scissorRect(bool) =&gt; scissorRect()?

I&apos;d like if it didn&apos;t. The damage tracker setting is only accessible via LRC, which is not available to the RenderSurface unless we pass it in. The tracker could pass an LRC pointer instead, but that&apos;s more &quot;impl specific&quot; which is why I left it as a bool. Any ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568883</commentid>
    <comment_count>19</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-01 13:52:01 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17) 
&gt; &gt; Also, does the occlusion tracker have to know about the damage tracking setting? In other words, how hard is it to change scissorRect(bool) =&gt; scissorRect()?
&gt; 
&gt; I&apos;d like if it didn&apos;t. The damage tracker setting is only accessible via LRC, which is not available to the RenderSurface unless we pass it in. The tracker could pass an LRC pointer instead, but that&apos;s more &quot;impl specific&quot; which is why I left it as a bool. Any ideas?

One option might be to only create the damage tracker if we&apos;re going to use it, and the surface could then know whether or not to ask the damage tracker. But, then there are a number of places where you have to start checking if the tracker exists.  On the other hand, it&apos;s kind of weird to read (e.g. CCLTHI::m_rootDamageRect) and write (e.g. CCLTHI::setFullRootLayerDamage()) to the damage tracker if those values are never going to be correct or used, respectively.

At any rate, that sounds like a bit of a yak shave.  I&apos;d be ok with punting that to another patch and not worrying about it here, unless you have any better ideas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569225</commentid>
    <comment_count>20</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-01 21:33:32 -0800</bug_when>
    <thetext>*** Bug 76786 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569238</commentid>
    <comment_count>21</comment_count>
      <attachid>129810</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-01 21:59:43 -0800</bug_when>
    <thetext>Created attachment 129810
Patch

Yak punted! There&apos;s lots of things I want to address wrt to RenderSurface, and this is another.

No MaybeRects needed, success. Thanks for that.

Realized the RenderSurface::clipRect() is in the target&apos;s coord space, not the surface&apos;s own. Reworked how scissor
is computed for layers and surfaces accordingly. This made me use RenderSurface::damageContentRect() instead of
RenderSurface::scissorRect() because the surface can&apos;t compute its own scissor without knowing the damage in its target.
The damageContentRect() is combined with the current layer/surface&apos;s clip in CCOcclusionTracker to determine the
appropriate scissor rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569267</commentid>
    <comment_count>22</comment_count>
      <attachid>129810</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-01 22:21:16 -0800</bug_when>
    <thetext>Comment on attachment 129810
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:330
&gt; +    IntRect damage = m_stack.last().surface-&gt;damageContentRect(m_useSurfaceDamage);

It occurred to me on my way home that getting the damage from the surface&apos;s damageTracker() is different than how the damage is computed for the actual glScissor, and may have adverse effects. Or is it okay to do this? Should I instead pass a over the computed surfaceDamageRect from CCLTHI for each surface? Something like:

occlusionTracker.enterTargetRenderSurface(surface, surfaceDamageRect);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569715</commentid>
    <comment_count>23</comment_count>
      <attachid>129912</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-02 09:41:13 -0800</bug_when>
    <thetext>Created attachment 129912
Patch

Ok this is converging I hope.

1) Uncomfortable with doing a different scissor calculation, I changed the interface so that CCLTHI can give the
same damage rects to the occlusionTracker that LRC will be using for drawing. I did this with a damageClient interface,
so CCOcclusionTracker can just query the client which will give back the damage. This lets us avoid knowing about things
 like CCRenderPass etc. And it can be null to not use damage.

1b) Also the client pattern here has a perk that we can still move the for-each-layer logic from CCLTH(I) into the
occlusionTracker in the future if we should choose to.

2) I realized that your uncertainty about computing occlusion of surfaces was well founded. While the
m_owningLayer-&gt;screenSpaceTransform seemed to do well enough for the surface contents, it would not include
the surface replica, and if that&apos;s not occluded, we need to consider the surface unoccluded. So I just took
out the surface methods, and we&apos;ll just worry about layers like we do currently in CCQuadCuller.

3) Added some more unit tests to test the interaction with the damage rect, instead of the overall scissor rects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569730</commentid>
    <comment_count>24</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-02 10:07:51 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=129912) [details]
&gt; Patch
&gt; 
&gt; Ok this is converging I hope.
&gt; 
&gt; 1) Uncomfortable with doing a different scissor calculation, I changed the interface so that CCLTHI can give the
&gt; same damage rects to the occlusionTracker that LRC will be using for drawing. 

Shawn confirmed this is the right scissor rect to be using.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570069</commentid>
    <comment_count>25</comment_count>
      <attachid>129986</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-02 18:40:18 -0800</bug_when>
    <thetext>Created attachment 129986
Patch

Little naming cleanup (be more explicit about coordinate space)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572001</commentid>
    <comment_count>26</comment_count>
      <attachid>129986</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-06 11:10:02 -0800</bug_when>
    <thetext>Comment on attachment 129986
Patch

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

I think this could be simplified a little bit more.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h:43
&gt; +template&lt;typename RenderSurfaceType&gt;
&gt; +class CCOcclusionTrackerDamageClientBase {
&gt; +public:
&gt; +    virtual FloatRect damageRect(const RenderSurfaceType*) const = 0;
&gt; +};

I feel like this is introducing yet another abstraction mechanism.  We&apos;re already using templates to deal with CCRenderSurface and RenderSurfaceChromium having the same interface but being different classes.  Is it possible to stick with that approach and just add RenderSurfaceType::damageRect() that returns the real damage rect for CCRenderSurface and the full content rect for RenderSurfaceChromium?

And, going further with this simplification, maybe there could just be a RenderSurfaceType::scissorRect() that includes both damage and content.  That&apos;d eliminate the need to test damage and content rects separately, yeah?

This approach would still allow a future change to move the for-each-layer logic here, right?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h:101
&gt; +    // Allow tests to override this.
&gt; +    virtual IntRect layerScissorRectInTargetSurface(const LayerType*) const;

Is it possible to just set the content rect directly on surfaces (or let it be calculated)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572312</commentid>
    <comment_count>27</comment_count>
      <attachid>129986</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-06 17:18:17 -0800</bug_when>
    <thetext>Comment on attachment 129986
Patch

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

I have to admit that it&apos;s really hard to understand design when the only consumer of an interface is a test.  I&apos;ve finally wrapped my head around all of this, though.  Thanks for bearing with me and for the offline discussion to explain the constraints here.  R=me, with one bikeshed nit below.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h:43
&gt;&gt; +};
&gt; 
&gt; I feel like this is introducing yet another abstraction mechanism.  We&apos;re already using templates to deal with CCRenderSurface and RenderSurfaceChromium having the same interface but being different classes.  Is it possible to stick with that approach and just add RenderSurfaceType::damageRect() that returns the real damage rect for CCRenderSurface and the full content rect for RenderSurfaceChromium?
&gt; 
&gt; And, going further with this simplification, maybe there could just be a RenderSurfaceType::scissorRect() that includes both damage and content.  That&apos;d eliminate the need to test damage and content rects separately, yeah?
&gt; 
&gt; This approach would still allow a future change to move the for-each-layer logic here, right?

I see.  You need to get the damage rect in surface space, for which you need the damage rect in screen space, the flag for whether to use partial swaps, and the transform.  So you&apos;re passing in DamageClientBase almost like a closure to calculate it.  I like your suggestion of filing a bug to better abstract the damage rects somewhere so that the occlusion tracker doesn&apos;t have to know so much about them.  In the short term, I think this is reasonable.

&gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:90
&gt; +    void resetLayerScissorRect() { m_overrideLayerScissorRect = false; }

bikeshed nit: This is kind of an opaque function name to my ears.  I usually expect a &quot;reset&quot; function to clear something, but instead it often makes the scissor rect even more constraining.  This is more like &quot;useDefaultLayerScissorRect&quot; or &quot;clearScissorRectOverride&quot;.  Another option that might be clearer would be to just set the scissor rect explicitly to whatever you want it to be at all times, always using an override.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572338</commentid>
    <comment_count>28</comment_count>
      <attachid>130492</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-06 17:36:13 -0800</bug_when>
    <thetext>Created attachment 130492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572340</commentid>
    <comment_count>29</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-06 17:36:55 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 129986 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129986&amp;action=review
&gt; 
&gt; I have to admit that it&apos;s really hard to understand design when the only consumer of an interface is a test.  I&apos;ve finally wrapped my head around all of this, though.  Thanks for bearing with me and for the offline discussion to explain the constraints here.  R=me, with one bikeshed nit below.

Indeed, thanks very much!

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.h:43
&gt; &gt;&gt; +};
&gt; &gt; 
&gt; &gt; I feel like this is introducing yet another abstraction mechanism.  We&apos;re already using templates to deal with CCRenderSurface and RenderSurfaceChromium having the same interface but being different classes.  Is it possible to stick with that approach and just add RenderSurfaceType::damageRect() that returns the real damage rect for CCRenderSurface and the full content rect for RenderSurfaceChromium?
&gt; &gt; 
&gt; &gt; And, going further with this simplification, maybe there could just be a RenderSurfaceType::scissorRect() that includes both damage and content.  That&apos;d eliminate the need to test damage and content rects separately, yeah?
&gt; &gt; 
&gt; &gt; This approach would still allow a future change to move the for-each-layer logic here, right?
&gt; 
&gt; I see.  You need to get the damage rect in surface space, for which you need the damage rect in screen space, the flag for whether to use partial swaps, and the transform.  So you&apos;re passing in DamageClientBase almost like a closure to calculate it.  I like your suggestion of filing a bug to better abstract the damage rects somewhere so that the occlusion tracker doesn&apos;t have to know so much about them.  In the short term, I think this is reasonable.

Done. http://code.google.com/p/chromium/issues/detail?id=117091

&gt; &gt; Source/WebKit/chromium/tests/CCOcclusionTrackerTest.cpp:90
&gt; &gt; +    void resetLayerScissorRect() { m_overrideLayerScissorRect = false; }
&gt; 
&gt; bikeshed nit: This is kind of an opaque function name to my ears.  I usually expect a &quot;reset&quot; function to clear something, but instead it often makes the scissor rect even more constraining.  This is more like &quot;useDefaultLayerScissorRect&quot; or &quot;clearScissorRectOverride&quot;.  Another option that might be clearer would be to just set the scissor rect explicitly to whatever you want it to be at all times, always using an override.

Thanks, done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572565</commentid>
    <comment_count>30</comment_count>
      <attachid>130492</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 23:08:10 -0800</bug_when>
    <thetext>Comment on attachment 130492
Patch

Clearing flags on attachment: 130492

Committed r110020: &lt;http://trac.webkit.org/changeset/110020&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572566</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 23:08:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573431</commentid>
    <comment_count>32</comment_count>
      <attachid>130492</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-03-07 18:00:27 -0800</bug_when>
    <thetext>Comment on attachment 130492
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:298
&gt; +    if (!layer-&gt;clipRect().isEmpty())

I know this patch already landed, but this line of code may be fishy.  Enne and I are wracking our brains right now to identify where clipRects might accidentally be used without usesLayerClipping() == true.  This is certainly not the source of our bugs, but I found it along the way.  should this condition be &quot;if (usesLayerClipping())&quot; instead of checking whether the clipRect is empty?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573463</commentid>
    <comment_count>33</comment_count>
      <attachid>130492</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-07 18:35:55 -0800</bug_when>
    <thetext>Comment on attachment 130492
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:298
&gt;&gt; +    if (!layer-&gt;clipRect().isEmpty())
&gt; 
&gt; I know this patch already landed, but this line of code may be fishy.  Enne and I are wracking our brains right now to identify where clipRects might accidentally be used without usesLayerClipping() == true.  This is certainly not the source of our bugs, but I found it along the way.  should this condition be &quot;if (usesLayerClipping())&quot; instead of checking whether the clipRect is empty?

I&apos;m not sure.. I thought that the clipRect was empty when it was not meant to be used. Since &quot;real&quot; empty clip rects get filtered out by calcDrawEtc. I was also confused about this issue and didn&apos;t find places that checked usesLayerClipping() except in RenderSurface as I recall. But I don&apos;t really know.. It&apos;s landed but I&apos;m happy to fix it if it&apos;s wrong. It&apos;s not really clear to me though atm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573464</commentid>
    <comment_count>34</comment_count>
      <attachid>130492</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-07 18:36:09 -0800</bug_when>
    <thetext>Comment on attachment 130492
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCOcclusionTracker.cpp:298
&gt;&gt; +    if (!layer-&gt;clipRect().isEmpty())
&gt; 
&gt; I know this patch already landed, but this line of code may be fishy.  Enne and I are wracking our brains right now to identify where clipRects might accidentally be used without usesLayerClipping() == true.  This is certainly not the source of our bugs, but I found it along the way.  should this condition be &quot;if (usesLayerClipping())&quot; instead of checking whether the clipRect is empty?

I&apos;m not sure.. I thought that the clipRect was empty when it was not meant to be used. Since &quot;real&quot; empty clip rects get filtered out by calcDrawEtc. I was also confused about this issue and didn&apos;t find places that checked usesLayerClipping() except in RenderSurface as I recall. But I don&apos;t really know.. It&apos;s landed but I&apos;m happy to fix it if it&apos;s wrong. It&apos;s not really clear to me though atm.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129481</attachid>
            <date>2012-02-29 11:19:46 -0800</date>
            <delta_ts>2012-02-29 19:42:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79927-20120229141945.patch</filename>
            <type>text/plain</type>
            <size>40298</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdjOTUwMTZiZGEwN2Vh
ZTE3MWEzYTJmMWFmYjUwYjYxZmRiZjkxOC4uMTIwNzY0M2FmNzQ2ZmJiYjBlMTc3YjZiMTk3OTk3
MzViZDQzZTdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAyLTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBsb2dpYyB0byBDQ09j
Y2x1c2lvblRyYWNrZXIgdG8gY2xpcCBxdWVyaWVzIHRvIHRoZSBjdXJyZW50CisgICAgICAgIHRh
cmdldCdzIGRhbWFnZSByZWN0LCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHNjaXNzb3JpbmcuCisK
KyAgICAgICAgVW5pdCB0ZXN0czogQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jbGlwUmVjdE92ZXJU
aWxlCisgICAgICAgICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3QuY2xpcFJlY3RP
dmVyQ3VsbGVkVGlsZQorICAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0
LmNsaXBSZWN0T3ZlclBhcnRpYWxUaWxlcworICAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lv
blRyYWNrZXJUZXN0LmNsaXBSZWN0T3Zlck5vVGlsZXMKKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjo6Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRlc3RD
b250ZW50UmVjdE9jY2x1ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6b2NjbHVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlT2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjo6OnVub2NjbHVk
ZWRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjo6OnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6OjpjdXJyZW50RGFtYWdlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q09jY2x1c2lvblRyYWNrZXIuaDoKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6Q0NPY2NsdXNpb25UcmFj
a2VyQmFzZSk6CisgICAgICAgIChTdGFja09iamVjdCk6CisKIDIwMTItMDItMjggIFl1cnkgU2Vt
aWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW92ZSBET00gY291bnRlciBncmFwaHMgb3V0IG9mIGV4cGVyaW1lbnRhbApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCAyMDdmZTgzZTkxMGEzMWEwNDI2Mjc2YzIzYTZkNmMwZDQ4MzY4YjA5
Li43NDQ0YmFhYTBlMTU0Y2VhMTE2OWIzZGZlN2M3OTk0NzljY2E3ZDY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAyLTI5ICBEYW5hIEphbnNlbnMg
IDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGNsaXBwaW5n
IHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OlRlc3RD
Q09jY2x1c2lvblRyYWNrZXIpOgorICAgICAgICAoVGVzdENDT2NjbHVzaW9uVHJhY2tlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRTdXJmYWNlQ2xpcFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6Y3VycmVudERh
bWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgIChXZWJDb3JlKToK
KwogMjAxMi0wMi0yOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNzkxNyBhbmQgcjEwOTE4OC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCmluZGV4IGM1NjExYWMyN2E2YWVj
NGE3ZmJkNjk0MDIzZDM0M2Y1MmJhNWQyM2MuLmZkOTljNmJmYWQ5NjdmZmQ5MjQyZTAwNmU0YWM3
MzMyNjg2ZjNlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDT2NjbHVzaW9uVHJhY2tlci5oIgogCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC0x
OTEsNiArMTkyLDggQEAgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGU+OjptYXJrT2NjbHVkZWRCZWhpbmRMYXkKIHsKICAgICBBU1NFUlQoIW1f
c3RhY2suaXNFbXB0eSgpKTsKICAgICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2Uo
KSA9PSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsKKyAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsYXllci0+ZHJhd09wYWNpdHkoKSAhPSAxKQog
ICAgICAgICByZXR1cm47CkBAIC0yMDIsMjMgKzIwNSwzMCBAQCB2b2lkIENDT2NjbHVzaW9uVHJh
Y2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1hcmtPY2NsdWRlZEJlaGlu
ZExheQogICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LnVuaXRlKGNvbXB1dGVP
Y2NsdXNpb25CZWhpbmRMYXllcjxMYXllclR5cGU+KGxheWVyLCBjb250ZW50VG9UYXJnZXRTdXJm
YWNlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNv
bnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24pCitzdGF0aWMgaW5s
aW5lIGJvb2wgdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNv
bnN0IFJlZ2lvbiYgb2NjbHVzaW9uLCBib29sIGNsaXAsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJl
Y3QgPSBGbG9hdFJlY3QoKSkKIHsKICAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRRdWFkID0gY29u
dGVudFNwYWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7Ci0gICAg
cmV0dXJuIG9jY2x1c2lvbi5jb250YWlucyh0cmFuc2Zvcm1lZFF1YWQuZW5jbG9zaW5nQm91bmRp
bmdCb3goKSk7CisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybWVkUmVjdCA9IHRyYW5zZm9ybWVkUXVh
ZC5ib3VuZGluZ0JveCgpOworICAgIGlmIChjbGlwKQorICAgICAgICB0cmFuc2Zvcm1lZFJlY3Qu
aW50ZXJzZWN0KGNsaXBSZWN0KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtZWRSZWN0LmlzRW1wdHko
KSB8fCBvY2NsdXNpb24uY29udGFpbnMoZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1lZFJlY3Qp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KIGJvb2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6b2NjbHVkZWQoY29uc3QgTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX3N0YWNrLmlzRW1wdHkoKSk7
CiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3QoKS5z
dXJmYWNlKTsKIAotICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwg
Y29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllciksIG1fc3RhY2su
bGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuKSkKKyAgICBib29sIGNsaXAgPSBtX2NsaXBUb0RhbWFn
ZVJlY3Q7CisgICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCA9IGN1cnJlbnREYW1hZ2VSZWN0
KG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOworCisgICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1
ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+
KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4sIGZhbHNlKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRS
ZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCkpCisgICAgaWYgKHRlc3RDb250ZW50UmVj
dE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtPExh
eWVyVHlwZT4obGF5ZXIpLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCwgY2xpcCwg
Y2xpcFJlY3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBA
IC0yMjYsMTcgKzIzNiwyMiBAQCBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT46Om9jY2x1ZGVkKGNvbnN0IExheWVyVAogdGVtcGxhdGU8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIGJvb2wgQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3VyZmFjZU9j
Y2x1ZGVkKGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250
ZW50UmVjdCkgY29uc3QKIHsKLSAgICAvLyBBIHN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IGxh
eWVycyBkcmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBuZWVkIHRvIHVzZSBvY2NsdXNpb24gZnJv
bSBvbmUgc3BvdCBkb3duIG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgp
KTsKICAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUKGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKKyAgICBJbnRS
ZWN0IHN1cmZhY2VDbGlwcGVkQ29udGVudFJlY3QgPSBzdXJmYWNlQ29udGVudFJlY3Q7CisgICAg
aWYgKG1fY2xpcFRvRGFtYWdlUmVjdCkKKyAgICAgICAgc3VyZmFjZUNsaXBwZWRDb250ZW50UmVj
dC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChjdXJyZW50RGFtYWdlUmVjdChtX3N0YWNrLmxh
c3QoKS5zdXJmYWNlKSkpOworCisgICAgLy8gQSBzdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBs
YXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZy
b20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2suCisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwg
MikKKyAgICAgICAgcmV0dXJuIHN1cmZhY2VDbGlwcGVkQ29udGVudFJlY3QuaXNFbXB0eSgpOwor
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZUNvbnRlbnRUb1NjcmVlblNwYWNlID0g
Y29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAKICAgICBj
b25zdCBTdGFja09iamVjdCYgc2Vjb25kTGFzdCA9IG1fc3RhY2tbbV9zdGFjay5zaXplKCktMl07
Ci0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKHN1cmZhY2VDb250ZW50UmVjdCwgc3Vy
ZmFjZUNvbnRlbnRUb1NjcmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKSkK
KyAgICBpZiAodGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoc3VyZmFjZUNsaXBwZWRDb250ZW50UmVj
dCwgc3VyZmFjZUNvbnRlbnRUb1NjcmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2Ny
ZWVuLCBmYWxzZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTI1NiwzMyArMjcxLDM5IEBAIHN0YXRpYyBpbmxpbmUgSW50UmVjdCByZWN0U3VidHJhY3RS
ZWdpb24oY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgUmVnaW9uJiByZWdpCiAgICAgcmV0dXJu
IGJvdW5kc1JlY3Q7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVu
dFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQorc3Rh
dGljIEludFJlY3QgY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5z
Zm9ybSwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24sIGJvb2wgY2xpcCwgY29uc3QgRmxvYXRSZWN0
JiBjbGlwUmVjdCA9IEZsb2F0UmVjdCgpKQogewogICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1
YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3Qp
KTsKLSAgICBpZiAoIXRyYW5zZm9ybWVkUXVhZC5pc1JlY3RpbGluZWFyKCkpCi0gICAgICAgIHJl
dHVybiBjb250ZW50UmVjdDsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3JtZWRSZWN0ID0gdHJhbnNm
b3JtZWRRdWFkLmJvdW5kaW5nQm94KCk7CisgICAgaWYgKGNsaXApCisgICAgICAgIHRyYW5zZm9y
bWVkUmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogICAgIC8vIFRha2UgdGhlIGVuY2xvc2luZ0lu
dFJlY3QgYXQgZWFjaCBzdGVwIGhlcmUsIGFzIHdlIHdhbnQgdG8gY29udGFpbiBhbnkgdW5vY2Ns
dWRlZCBwYXJ0aWFsIHBpeGVscyBpbiB0aGUgcmVzdWx0aW5nIEludFJlY3QuCi0gICAgSW50UmVj
dCBzaHJ1bmtSZWN0ID0gcmVjdFN1YnRyYWN0UmVnaW9uKGVuY2xvc2luZ0ludFJlY3QodHJhbnNm
b3JtZWRRdWFkLmJvdW5kaW5nQm94KCkpLCBvY2NsdXNpb24pOworICAgIEludFJlY3Qgc2hydW5r
UmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUmVj
dCksIG9jY2x1c2lvbik7CiAgICAgSW50UmVjdCB1bm9jY2x1ZGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoY29udGVudFNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdChz
aHJ1bmtSZWN0KSkpOwotICAgIC8vIFRoZSB1c2Ugb2YgZW5jbG9zaW5nSW50UmVjdCwgd2l0aCBm
bG9hdGluZyBwb2ludCByb3VuZGluZywgY2FuIGdpdmUgdXMgYSByZXN1bHQgdGhhdCBpcyBub3Qg
YSBzdWItcmVjdCBvZiBjb250ZW50UmVjdCwgYnV0IG91cgotICAgIC8vIHJldHVybiB2YWx1ZSBz
aG91bGQgYmUgYSBzdWItcmVjdC4KKyAgICAvLyBUaGUgcmVjdCBiYWNrIGluIGNvbnRlbnQgc3Bh
Y2UgaXMgYSBib3VuZGluZyBib3ggYW5kIG1heSBleHRlbmQgb3V0c2lkZSBvZiB0aGUgb3JpZ2lu
YWwgY29udGVudFJlY3QsIGJ1dCB3ZSBzaG91bGQgcmV0dXJuIGEgc3ViLXJlY3Qgb2YgY29udGVu
dFJlY3QuCiAgICAgcmV0dXJuIGludGVyc2VjdGlvbih1bm9jY2x1ZGVkUmVjdCwgY29udGVudFJl
Y3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgogSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiBs
YXllciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFt
X3N0YWNrLmlzRW1wdHkoKSk7CiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gY29udGVudFJlY3Q7CiAKICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIHJlY3QgdGhh
dCBjb250YWlucyBhbGwgdGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBib3Ro
IHNjcmVlbiBzcGFjZSBhbmQgaW4gdGhlIHRhcmdldCBzdXJmYWNlLgogICAgIC8vIFNvIHdlIGZp
bmQgdGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBlYWNoIHNwYWNlLCBhbmQg
dGFrZSB0aGUgaW50ZXJzZWN0aW9uLgogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVu
dFRvU2NyZWVuU3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+
KGxheWVyKTsKKyAgICBib29sIGNsaXAgPSBtX2NsaXBUb0RhbWFnZVJlY3Q7CisgICAgY29uc3Qg
RmxvYXRSZWN0JiBjbGlwUmVjdCA9IGN1cnJlbnREYW1hZ2VSZWN0KG1fc3RhY2subGFzdCgpLnN1
cmZhY2UpOworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFj
ZSA9IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVuU3BhY2UgPSBjb250ZW50VG9T
Y3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKIAotICAgIEludFJlY3QgdW5v
Y2NsdWRlZEluU2NyZWVuID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChjb250ZW50UmVj
dCwgY29udGVudFRvU2NyZWVuU3BhY2UsIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVu
KTsKLSAgICBJbnRSZWN0IHVub2NjbHVkZWRJblRhcmdldCA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29u
dGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2UsIG1fc3RhY2subGFz
dCgpLm9jY2x1c2lvbkluVGFyZ2V0KTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblRhcmdldCA9
IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1Rhcmdl
dFN1cmZhY2UsIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0LCBjbGlwLCBjbGlwUmVj
dCk7CisgICAgaWYgKHVub2NjbHVkZWRJblRhcmdldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5TY3JlZW4gPSBjb21wdXRlVW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZSwgbV9z
dGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4sIGZhbHNlKTsKIAogICAgIHJldHVybiBpbnRl
cnNlY3Rpb24odW5vY2NsdWRlZEluU2NyZWVuLCB1bm9jY2x1ZGVkSW5UYXJnZXQpOwogfQpAQCAt
MjkwLDI1ICszMTEsNDIgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udGVudFIKIHRlbXBsYXRlPHR5cGVu
YW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBJbnRSZWN0IENDT2Nj
bHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnN1cmZhY2VV
bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVj
dCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdAogewotICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qg
b2NjbHVkZWQgYnkgbGF5ZXJzIGRyYXdpbmcgaW50byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNl
IG9jY2x1c2lvbiBmcm9tIG9uZSBzcG90IGRvd24gb24gdGhlIHN0YWNrLgotICAgIGlmIChtX3N0
YWNrLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybiBzdXJmYWNlQ29udGVudFJlY3Q7Ci0KKyAg
ICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKICAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1
cmZhY2UoKSk7CiAgICAgQVNTRVJUKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5s
YXN0KCkuc3VyZmFjZSk7CiAKKyAgICBJbnRSZWN0IHN1cmZhY2VDbGlwcGVkQ29udGVudFJlY3Qg
PSBzdXJmYWNlQ29udGVudFJlY3Q7CisgICAgaWYgKG1fY2xpcFRvRGFtYWdlUmVjdCkKKyAgICAg
ICAgc3VyZmFjZUNsaXBwZWRDb250ZW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChj
dXJyZW50RGFtYWdlUmVjdChtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKSkpOworCisgICAgLy8gQSBz
dXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28g
d2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2su
CisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIHN1cmZhY2VDbGlw
cGVkQ29udGVudFJlY3Q7CisKICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIHJlY3QgdGhhdCBj
b250YWlucyBhbGwgdGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBib3RoIHNj
cmVlbiBzcGFjZSBhbmQgaW4gdGhlIHRhcmdldCBzdXJmYWNlLgogICAgIC8vIFNvIHdlIGZpbmQg
dGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBlYWNoIHNwYWNlLCBhbmQgdGFr
ZSB0aGUgaW50ZXJzZWN0aW9uLgogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRv
U2NyZWVuU3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxh
eWVyKTsKIAogICAgIGNvbnN0IFN0YWNrT2JqZWN0JiBzZWNvbmRMYXN0ID0gbV9zdGFja1ttX3N0
YWNrLnNpemUoKS0yXTsKLSAgICBJbnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9IGNvbXB1dGVV
bm9jY2x1ZGVkQ29udGVudFJlY3Qoc3VyZmFjZUNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5T
cGFjZSwgc2Vjb25kTGFzdC5vY2NsdXNpb25JblNjcmVlbik7CisgICAgSW50UmVjdCB1bm9jY2x1
ZGVkSW5TY3JlZW4gPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2VDbGlwcGVk
Q29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbklu
U2NyZWVuLCBmYWxzZSk7CiAKICAgICByZXR1cm4gdW5vY2NsdWRlZEluU2NyZWVuOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
RmxvYXRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46OmN1cnJlbnREYW1hZ2VSZWN0KGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogLyog
c3VyZmFjZSAqLykgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CitGbG9h
dFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBl
Pjo6Y3VycmVudERhbWFnZVJlY3QoY29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSBjb25z
dAoreworICAgIHJldHVybiBzdXJmYWNlLT5kYW1hZ2VUcmFja2VyKCktPmN1cnJlbnREYW1hZ2VS
ZWN0KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGU+CiBjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmN1cnJlbnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKQEAgLTMzNCw2ICszNzIs
OCBAQCB0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1
bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6dQogdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNvbnN0IEludFJl
Y3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBjb25zdCBSZWdpb24mIEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
Pjo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdDsKIHRlbXBsYXRlIGNvbnN0
IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0+OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0
ZW1wbGF0ZSBGbG9hdFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpjdXJyZW50RGFtYWdlUmVjdChjb25zdCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qKSBjb25zdDsKK3RlbXBsYXRlIEZsb2F0UmVjdCBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OmN1cnJlbnREYW1h
Z2VSZWN0KGNvbnN0IENDUmVuZGVyU3VyZmFjZSopIGNvbnN0OwogCiB0ZW1wbGF0ZSB2b2lkIEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7CiB0
ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVy
U3VyZmFjZT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCog
b3duaW5nTGF5ZXIsIGNvbnN0IENDUmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQpOwpAQCAt
MzQ1LDYgKzM4NSw4IEBAIHRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxD
Q0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6dW5vY2NsdWRlCiB0ZW1wbGF0ZSBJbnRSZWN0
IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRS
ZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgY29uc3QgUmVnaW9uJiBD
Q09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpjdXJy
ZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogdGVtcGxhdGUgY29uc3QgUmVnaW9u
JiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Ojpj
dXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0ZW1wbGF0ZSBGbG9hdFJl
Y3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6
Y3VycmVudERhbWFnZVJlY3QoY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKikgY29uc3Q7Cit0
ZW1wbGF0ZSBGbG9hdFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NS
ZW5kZXJTdXJmYWNlPjo6Y3VycmVudERhbWFnZVJlY3QoY29uc3QgQ0NSZW5kZXJTdXJmYWNlKikg
Y29uc3Q7CiAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lv
blRyYWNrZXIuaAppbmRleCBkMWM4MzNlMWE5YmE0ZWVkZTlhYmRmNDMwMjFlN2VkN2I0YzRmZjE2
Li5kODNhZmEzZDlkZThjNzNmZjJiYTBlMzEzNWUwNDI1ZjNhN2QyNGZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRy
YWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ09jY2x1c2lvblRyYWNrZXIuaApAQCAtNDMsOCArNDMsOSBAQCBjbGFzcyBSZW5kZXJTdXJm
YWNlQ2hyb21pdW07CiAvLyBGaW5hbGx5LCBvbmNlIGZpbmlzaGVkIHdpdGggdGhlIGxheWVyLCBv
Y2NsdXNpb24gYmVoaW5kIHRoZSBsYXllciBzaG91bGQgYmUgbWFya2VkIGJ5IGNhbGxpbmcgbWFy
a09jY2x1ZGVkQmVoaW5kTGF5ZXIoKS4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJCYXNlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09jY2x1c2lvblRyYWNrZXJCYXNlKTsKIHB1Ymxp
YzoKLSAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlKCkgeyB9CisgICAgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZShib29sIGNsaXBUb0RhbWFnZVJlY3QpIDogbV9jbGlwVG9EYW1hZ2VSZWN0KGNsaXBU
b0RhbWFnZVJlY3QpIHsgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBsYXllciBy
ZXByZXNlbnRpbmcgaXRzZWxmLiBJZiB0aGUgdGFyZ2V0IHdhcyBub3QgYWxyZWFkeSBjdXJyZW50
LCB0aGVuIHRoaXMgaW5kaWNhdGVzIHdlIGhhdmUgZW50ZXJlZCBhIG5ldyBzdXJmYWNlIHN1YnRy
ZWUuCiAgICAgdm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIG5ld1RhcmdldCk7CkBAIC05MCw4ICs5MSwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8g
V2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBu
ZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhlIHN0
YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgogICAgIFZlY3RvcjxTdGFja09iamVjdCwgMT4gbV9z
dGFjazsKIAorICAgIC8vIEFsbG93IHRlc3RzIHRvIG92ZXJyaWRlIHRoZXNlLgorICAgIHZpcnR1
YWwgRmxvYXRSZWN0IGN1cnJlbnREYW1hZ2VSZWN0KGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1
bSopIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGN1cnJlbnREYW1hZ2VSZWN0KGNvbnN0
IENDUmVuZGVyU3VyZmFjZSopIGNvbnN0OworCisKIHByaXZhdGU6Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ0NPY2NsdXNpb25UcmFja2VyQmFzZSk7CisgICAgYm9vbCBtX2NsaXBUb0RhbWFn
ZVJlY3Q7CiB9OwogCiB0eXBlZGVmIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1
bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiBDQ09jY2x1c2lvblRyYWNrZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNw
cAppbmRleCA2NzhlYzk2NDUyYjBiYWVkNjg3YWVmNjY2NjJkZjNkOGQ1MTA1ZGE4Li4wYjM0ZmNh
N2E5MzFlZjkyOTZkYWZiNDliMTQ0ZDEzNGNjNzIzYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTY4
LDE3ICs2OCwyOCBAQCBwdWJsaWM6CiAvLyBBIHN1YmNsYXNzIHRvIGV4cG9zZSB0aGUgdG90YWwg
Y3VycmVudCBvY2NsdXNpb24uCiBjbGFzcyBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIDogcHVibGlj
IENDT2NjbHVzaW9uVHJhY2tlciB7CiBwdWJsaWM6CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tl
cihib29sIGNsaXBUb0RhbWFnZVJlY3QpIDogQ0NPY2NsdXNpb25UcmFja2VyKGNsaXBUb0RhbWFn
ZVJlY3QpIHsgfQorCiAgICAgUmVnaW9uIG9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdCB7
IHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2Ny
ZWVuOyB9CiAgICAgUmVnaW9uIG9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0
dXJuIENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQ7
IH0KIAogICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5TY3JlZW5TcGFjZShjb25zdCBSZWdpb24mIHJl
Z2lvbikgeyBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2Ny
ZWVuID0gcmVnaW9uOyB9CiAgICAgdm9pZCBzZXRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoY29u
c3QgUmVnaW9uJiByZWdpb24pIHsgQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5v
Y2NsdXNpb25JblRhcmdldCA9IHJlZ2lvbjsgfQorCisgICAgdm9pZCBzZXRTdXJmYWNlQ2xpcFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fc3VyZmFjZUNsaXBSZWN0ID0gcmVjdDsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBGbG9hdFJlY3QgY3VycmVudERhbWFnZVJlY3QoY29u
c3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKikgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlQ2xpcFJl
Y3Q7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjdXJyZW50RGFtYWdlUmVjdChjb25zdCBDQ1Jl
bmRlclN1cmZhY2UqKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VDbGlwUmVjdDsgfQorCitwcml2
YXRlOgorICAgIEZsb2F0UmVjdCBtX3N1cmZhY2VDbGlwUmVjdDsKIH07CiAKIFRFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCiB7CiAgICAgLy8g
VGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uKGZhbHNlKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudCgpKTsKQEAgLTEyNSw3ICsxMzYsNyBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQogVEVTVChDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikKIHsKICAgICAv
LyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0g
ICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgVGVzdENDT2NjbHVzaW9u
VHJhY2tlciBvY2NsdXNpb24oZmFsc2UpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50KCkpOwpAQCAtMTc3LDcgKzE4OCw3IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRpb24pCiBURVNUKEND
T2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5z
bGF0aW9uKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBh
cmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAg
ICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihmYWxzZSk7CiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CkBAIC0yMjcsNyArMjM4LDcgQEAgVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhU
cmFuc2xhdGlvbikKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2Nj
bHVkZWRSZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0
IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVzaW9uOworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
KGZhbHNlKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCk7CkBAIC0zMTQsNyArMzI1LDcgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBs
YXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKIFRFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFs
cmVhZHlPblN0YWNrKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNm
b3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lv
bjsKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihmYWxzZSk7CiAgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNDY1LDcg
KzQ3Niw3IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVk
ZWRSZWdpb25XaXRoU3VyZmFjZUFscmVhZHlPblN0YWNrCiAKIFRFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZE9mZkF4aXNTdXJm
YWNlKQogewotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKGZhbHNlKTsKICAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC01NTIsNyArNTYzLDcgQEAgVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhS
b3RhdGVkT2ZmQXhpc1N1cmZhY2UKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJB
ZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVsdGlwbGVPcGFxdWVMYXllcnMpCiB7CiAgICAgLy8g
VGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyB0ZXN0IGJ1dCBub3cgd2UgbWFrZSBhIGZl
dyBvcGFxdWUgbGF5ZXJzIGluc2lkZSBvZiB8Y2hpbGR8IHNvIHRoYXQgdGhlIG9jY2x1ZGVkIHBh
cnRzIG9mIGNoaWxkIGFyZSBub3QgYSBzaW1wbGUgcmVjdC4KLSAgICBUZXN0Q0NPY2NsdXNpb25U
cmFja2VyIG9jY2x1c2lvbjsKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihm
YWxzZSk7CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwpAQCAtNjYxLDcgKzY3Miw3IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVsdGlwbGVPcGFxdWVMYXllcnMpCiBURVNUKEND
T2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3ZlcmxhcHBpbmdTaWJs
aW5nU3VyZmFjZXMpCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zv
cm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
OworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKGZhbHNlKTsKICAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNzg3LDcg
Kzc5OCw3IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldp
dGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNlcykKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0
aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVz
aW9uKGZhbHNlKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOwpAQCAtOTI2LDcgKzkzNyw3IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCiBURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykK
IHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5n
IHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgVGVzdEND
T2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oZmFsc2UpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0xMDcxLDcgKzEwODIsNyBAQCBU
RVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNl
RGlmZmVyZW50VHJhbnNmb3JtcykKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgb2NjbHVz
aW9uSW50ZXJhY3Rpb25XaXRoRmlsdGVycykKIHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhl
IHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJh
Y2tlciBvY2NsdXNpb247CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oZmFs
c2UpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGJsdXJMYXll
ciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsK
QEAgLTExNzAsNCArMTE4MSwyNjggQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBvY2Ns
dXNpb25JbnRlcmFjdGlvbldpdGhGaWx0ZXJzKQogICAgIEVYUEVDVF9FUSgxdSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKIH0KIAorI2RlZmlu
ZSBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShyZWN0LCBsYXllciwgc3VyZmFjZWxheWVy
KSBcCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLCByZWN0KSk7IFwK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKHN1cmZhY2VsYXllciwg
cmVjdCkpOworCisjZGVmaW5lIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShyZWN0
LCBsYXllciwgc3VyZmFjZWxheWVyKSBcCisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2Ns
dWRlZChsYXllciwgcmVjdCkpOyBcCisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNl
T2NjbHVkZWQoc3VyZmFjZWxheWVyLCByZWN0KSk7CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgY2xpcFJlY3RPdmVyVGlsZSkKK3sKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9j
Y2x1c2lvbih0cnVlKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisg
ICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFw
cGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBG
aWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJz
KGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgz
MDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVu
dExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7
CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VDbGlwUmVjdChGbG9hdFJlY3QoMjAwLCAxMDAsIDEw
MCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwg
bGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEw
MCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xV
REVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQo
KSwgbGF5ZXIuZ2V0KCkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2Uo
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0ND
TFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIu
Z2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50
TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MTAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwg
MTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1Rf
Tk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBw
YXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURF
RF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdl
dCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZB
Q0UoSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExh
eWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEw
MCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDIwMCwgMTAw
LCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworCisgICAgb2Nj
bHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwg
MzAwLCAzMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAx
MDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgY2xpcFJlY3RPdmVyQ3VsbGVkVGlsZSkKK3sKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1c2lvbih0cnVlKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIp
OworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9u
cygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUo
MC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRG
aWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VDbGlwUmVjdChGbG9hdFJlY3QoMTAwLCAx
MDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNl
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwg
MTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZ
RVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEw
MCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisKKyAgICBvY2Ns
dXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lv
bi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVy
U3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEw
MCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09D
Q0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5
ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJf
U1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBw
YXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50
UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAw
LCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwg
cGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVE
RURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVy
LmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFy
ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJm
YWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwg
MzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMTAwLCAx
MDAsIDEwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKK30KKworVEVTVChDQ09jY2x1c2lvblRy
YWNrZXJUZXN0LCBjbGlwUmVjdE92ZXJQYXJ0aWFsVGlsZXMpCit7CisgICAgVGVzdENDT2NjbHVz
aW9uVHJhY2tlciBvY2NsdXNpb24odHJ1ZSk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxk
KGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXll
ci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsK
KworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5zZXRTdXJmYWNlQ2xpcFJlY3QoRmxvYXRSZWN0
KDUwLCA1MCwgMjAwLCAyMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1
cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVE
X0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXll
ci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNU
X05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxh
eWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdl
dCgpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQo
KSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVS
X1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJl
bnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAw
LCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVD
VF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgcGFy
ZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xV
REVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXll
ci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZ
RVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwg
cGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFD
RShJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5
ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0
KDEwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAy
MDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAwLCAzMDAsIDMwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgNTAsIDUw
LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDAsIDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAx
MDAsIDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMjAwLCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCAyMDAsIDIwMCksIG9jY2x1c2lvbi5z
dXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAz
MDAsIDMwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCA1MCks
IG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgwLCAwLCAzMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCAx
MDAsIDIwMCwgMTAwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lv
bi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAs
IDIwMCwgMTAwLCAxMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgY2xp
cFJlY3RPdmVyTm9UaWxlcykKK3sKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lv
bih0cnVlKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJl
bnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxh
eWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hp
bGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmls
dGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRl
cnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMw
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVy
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIw
MCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
ZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAg
ICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAg
b2NjbHVzaW9uLnNldFN1cmZhY2VDbGlwUmVjdChGbG9hdFJlY3QoNTAwLCA1MDAsIDEwMCwgMTAw
KSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgLy8gVGhlc2UgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjbGlwIHJl
Y3QuCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xB
WUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwg
MCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0
KCksIGxheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNl
KHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5k
ZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09D
Q0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVy
LmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVu
dExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0
KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEw
MCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBF
Q1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIHBh
cmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVE
X0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0
KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFD
RShJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5
ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAw
LCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsK
KyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAxMDAs
IDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBvY2Ns
dXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkp
OworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDAsIDAsIDMwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMw
MCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKS5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKS5pc0VtcHR5KCkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgp
LCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgxMDAsIDIwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129618</attachid>
            <date>2012-02-29 19:42:33 -0800</date>
            <delta_ts>2012-03-01 08:35:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79927-20120229224232.patch</filename>
            <type>text/plain</type>
            <size>65751</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdjOTUwMTZiZGEwN2Vh
ZTE3MWEzYTJmMWFmYjUwYjYxZmRiZjkxOC4uNDk2MzYzYTVhZGYyODdkZGU4NGJlNDEwN2NmODg4
OGRjNGY3M2Q2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAyLTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBsb2dpYyB0byBDQ09j
Y2x1c2lvblRyYWNrZXIgdG8gY2xpcCBxdWVyaWVzIHRvIHRoZSBjdXJyZW50CisgICAgICAgIHRh
cmdldCdzIHNjaXNzb3IgcmVjdC4gV2hlbiB0cmFja2luZyBkYW1hZ2UgZm9yIHBhcnRpYWwgc3dh
cHMsCisgICAgICAgIHRoaXMgc2Npc3NvciBpcyBjb250YWluZWQgd2l0aGluIHRoZSBkYW1hZ2Ug
cmVjdC4KKworICAgICAgICBVc2VzIGEgbmV3IENDRmxvYXRTY2lzc29yUmVjdCBjbGFzcyB0aGF0
IGlzIGEgc3BlY2lhbGl6ZWQKKyAgICAgICAgcmVjdCBjbGFzcyB3aGljaCBjYW4gYmUgaW5maW5p
dGUgaW4gc2l6ZS4KKworICAgICAgICBVbml0IHRlc3RzOiBDQ09jY2x1c2lvblRyYWNrZXJUZXN0
LnN1cmZhY2VTY2lzc29yUmVjdE92ZXJUaWxlCisgICAgICAgICAgICAgICAgICAgIENDT2NjbHVz
aW9uVHJhY2tlclRlc3Quc3VyZmFjZVNjaXNzb3JSZWN0T3ZlckN1bGxlZFRpbGUKKyAgICAgICAg
ICAgICAgICAgICAgQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5zdXJmYWNlU2Npc3NvclJlY3RPdmVy
UGFydGlhbFRpbGVzCisgICAgICAgICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3Qu
c3VyZmFjZVNjaXNzb3JSZWN0T3Zlck5vVGlsZXMKKyAgICAgICAgICAgICAgICAgICAgQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdC5zY3JlZW5TY2lzc29yUmVjdE92ZXJUaWxlCisgICAgICAgICAgICAg
ICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3Quc2NyZWVuU2Npc3NvclJlY3RPdmVyQ3VsbGVk
VGlsZQorICAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0LnNjcmVlblNj
aXNzb3JSZWN0T3ZlclBhcnRpYWxUaWxlcworICAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lv
blRyYWNrZXJUZXN0LnNjcmVlblNjaXNzb3JSZWN0T3Zlck5vVGlsZXMKKyAgICAgICAgICAgICAg
ICAgICAgQ0NTY2lzc29yUmVjdFRlc3QuY29uc3RydWN0b3JzCisgICAgICAgICAgICAgICAgICAg
IENDU2Npc3NvclJlY3RUZXN0LmludGVyc2VjdAorICAgICAgICAgICAgICAgICAgICBDQ1NjaXNz
b3JSZWN0VGVzdC5pbnRlcnNlY3Rpb24KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgor
ICAgICAgICAoUmVuZGVyU3VyZmFjZUNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6OjptYXJrT2NjbHVkZWRCZWhpbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjp0ZXN0Q29u
dGVudFJlY3RPY2NsdWRlZCk6CisgICAgICAgIChXZWJDb3JlOjo6Om9jY2x1ZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6c3VyZmFjZU9jY2x1ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Ojp1bm9jY2x1ZGVk
Q29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRl
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6c2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjo6OnNjaXNzb3JSZWN0SW5T
Y3JlZW5TcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmg6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJCYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlckJhc2U6OkNDT2NjbHVzaW9uVHJhY2tl
ckJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNjaXNzb3JS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaXNzb3JSZWN0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ1NjaXNzb3JSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2Npc3NvclJlY3Q6OkNDU2Npc3NvclJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY2lzc29yUmVjdDo6aW5maW5pdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
Y2lzc29yUmVjdDo6aGFzQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Npc3NvclJlY3Q6
OmJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NjaXNzb3JSZWN0OjppbnRlcnNlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0aW9uKToKKwogMjAxMi0wMi0yOCAgWXVyeSBTZW1p
a2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBt
b3ZlIERPTSBjb3VudGVyIGdyYXBocyBvdXQgb2YgZXhwZXJpbWVudGFsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDIwN2ZlODNlOTEwYTMxYTA0MjYyNzZjMjNhNmQ2YzBkNDgzNjhiMDku
LmU5YmMzZjViNmM3NWY4NjQyMDNmZGNiNzg3MzE3NjljZjk5OTJmYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDItMjkgIERhbmEgSmFuc2VucyAg
PGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgY2xpcHBpbmcg
dG8gc2Npc3NvciByZWN0IHRvIENDT2NjbHVzaW9uVHJhY2tlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwOgorICAgICAgICAoVGVzdENDT2NjbHVzaW9u
VHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRT
dXJmYWNlU2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJh
Y2tlcjo6c2V0U2NyZWVuU2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2Nj
bHVzaW9uVHJhY2tlcjo6c2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6c2Npc3NvclJlY3RJblNjcmVlblNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICog
dGVzdHMvQ0NTY2lzc29yUmVjdFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDItMjggIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMDc5MTcgYW5kIHIxMDkxODguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYWUxZWFjNzdkZjNh
ODFkMWZhMTc1ZmMzYmQ2ODM2MjEzOGQ5NzAyZS4uNmVmOGMyNjAwMjNmMmJkNzNmNjEyZTQ3OGQz
MWMwZGI0YWNhN2E1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzM0OSw2ICszMzQ5LDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0
YXRlTWFjaGluZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2Npc3NvclJlY3QuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVh
ZFN0YXRlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAppbmRleCA5MDQ1NDI1
YmMzZmJmZjIzYzgyMWZmZmU4YTRiYjA3Mzk1YjBlMjhjLi40YjExY2VkNGVlNTE5ZWFlNGQyNTlk
YzYyZGEwMjFjZDBjMGVmMmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lu
Y2x1ZGUgImNjL0NDU2Npc3NvclJlY3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTEsNiArOTIsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXROZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoUmVuZGVyU3VyZmFjZUNocm9taXVt
KiBzdXJmYWNlKSB7IG1fbmVhcmVzdEFuY2VzdG9yVGhhdE1vdmVzUGl4ZWxzID0gc3VyZmFjZTsg
fQogICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbmVhcmVzdEFuY2VzdG9yVGhhdE1v
dmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhl
bHM7IH0KIAorICAgIENDRmxvYXRTY2lzc29yUmVjdCBzY2lzc29yUmVjdChib29sIC8qIHVzZURh
bWFnZSAqLykgY29uc3QgeyByZXR1cm4gQ0NGbG9hdFNjaXNzb3JSZWN0OjppbmZpbml0eSgpOyB9
CisKIHByaXZhdGU6CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25pbmdMYXllcjsKICAgICBMYXll
ckNocm9taXVtKiBtX21hc2tMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIu
Y3BwCmluZGV4IGM1NjExYWMyN2E2YWVjNGE3ZmJkNjk0MDIzZDM0M2Y1MmJhNWQyM2MuLjA3MmIw
OTlkM2E1NWYzNWU4MTNiZThmOTAyZTJjYjQ1MmUxMmQ3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDT2Nj
bHVzaW9uVHJhY2tlci5oIgogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
ImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAKICNp
bmNsdWRlIDxhbGdvcml0aG0+CkBAIC0xOTEsNiArMTkyLDggQEAgdm9pZCBDQ09jY2x1c2lvblRy
YWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjptYXJrT2NjbHVkZWRCZWhp
bmRMYXkKIHsKICAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKICAgICBBU1NFUlQobGF5
ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsKKyAg
ICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsYXll
ci0+ZHJhd09wYWNpdHkoKSAhPSAxKQogICAgICAgICByZXR1cm47CkBAIC0yMDIsMjMgKzIwNSwy
NSBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheQogICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lv
bkluVGFyZ2V0LnVuaXRlKGNvbXB1dGVPY2NsdXNpb25CZWhpbmRMYXllcjxMYXllclR5cGU+KGxh
eWVyLCBjb250ZW50VG9UYXJnZXRTdXJmYWNlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0
ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3QgUmVnaW9u
JiBvY2NsdXNpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBj
b250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IENDRmxvYXRTY2lzc29yUmVjdCYgc2Npc3NvclJl
Y3QsIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQogewotICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1l
ZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJl
Y3QpKTsKLSAgICByZXR1cm4gb2NjbHVzaW9uLmNvbnRhaW5zKHRyYW5zZm9ybWVkUXVhZC5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3JtZWRSZWN0ID0gaW50
ZXJzZWN0aW9uKGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChjb250ZW50
UmVjdCkpLCBzY2lzc29yUmVjdCk7CisgICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCwg
YXMgd2Ugd2FudCB0byBpbmNsdWRlIHBhcnRpYWwgcGl4ZWxzIGluIHRoZSB0ZXN0LgorICAgIHJl
dHVybiB0cmFuc2Zvcm1lZFJlY3QuaXNFbXB0eSgpIHx8IG9jY2x1c2lvbi5jb250YWlucyhlbmNs
b3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUmVjdCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBM
YXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogYm9vbCBDQ09jY2x1c2lvblRy
YWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpvY2NsdWRlZChjb25zdCBM
YXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAg
ICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOwogCi0gICAgaWYgKHRlc3RDb250
ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9y
bTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pKQor
ICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllciksIHNjaXNzb3JSZWN0SW5TY3JlZW5T
cGFjZSgpLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbikpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29u
dGVudFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5s
YXN0KCkub2NjbHVzaW9uSW5UYXJnZXQpKQorICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRl
ZChjb250ZW50UmVjdCwgY29udGVudFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+
KGxheWVyKSwgc2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoKSwgbV9zdGFjay5sYXN0KCkub2Nj
bHVzaW9uSW5UYXJnZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CkBAIC0yMjYsMTkgKzIzMSwxOCBAQCBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om9jY2x1ZGVkKGNvbnN0IExheWVyVAogdGVtcGxh
dGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIGJvb2wg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3Vy
ZmFjZU9jY2x1ZGVkKGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHN1cmZh
Y2VDb250ZW50UmVjdCkgY29uc3QKIHsKLSAgICAvLyBBIHN1cmZhY2UgaXMgbm90IG9jY2x1ZGVk
IGJ5IGxheWVycyBkcmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBuZWVkIHRvIHVzZSBvY2NsdXNp
b24gZnJvbSBvbmUgc3BvdCBkb3duIG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGFjay5zaXpl
KCkgPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBBU1NFUlQoIW1fc3RhY2suaXNF
bXB0eSgpKTsKICAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJU
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlQ29udGVudFRvU2NyZWVuU3BhY2UgPSBjb250
ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKKyAgICBJbnRSZWN0
IHN1cmZhY2VDbGlwcGVkQ29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGludGVyc2VjdGlv
bihzdXJmYWNlQ29udGVudFJlY3QsIHNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKCkpKTsKIAot
ICAgIGNvbnN0IFN0YWNrT2JqZWN0JiBzZWNvbmRMYXN0ID0gbV9zdGFja1ttX3N0YWNrLnNpemUo
KS0yXTsKLSAgICBpZiAodGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoc3VyZmFjZUNvbnRlbnRSZWN0
LCBzdXJmYWNlQ29udGVudFRvU2NyZWVuU3BhY2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5TY3Jl
ZW4pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQSBz
dXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28g
d2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2su
CisgICAgUmVnaW9uIG9jY2x1c2lvbjsKKyAgICBpZiAobV9zdGFjay5zaXplKCkgPj0gMikKKyAg
ICAgICAgb2NjbHVzaW9uID0gbV9zdGFja1ttX3N0YWNrLnNpemUoKS0yXS5vY2NsdXNpb25JblNj
cmVlbjsKKworICAgIHJldHVybiB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChzdXJmYWNlQ2xpcHBl
ZENvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxh
eWVyKSwgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKCksIG9jY2x1c2lvbik7CiB9CiAKIC8vIERl
dGVybWluZXMgd2hhdCBwb3J0aW9uIG9mIHJlY3QsIGlmIGFueSwgaXMgdW5vY2NsdWRlZCAobm90
IG9jY2x1ZGVkIGJ5IHJlZ2lvbikuIElmCkBAIC0yNTYsMjIgKzI2MCwyMCBAQCBzdGF0aWMgaW5s
aW5lIEludFJlY3QgcmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IFJlZ2lvbiYgcmVnaQogICAgIHJldHVybiBib3VuZHNSZWN0OwogfQogCi1zdGF0aWMgSW50UmVj
dCBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25z
dCBSZWdpb24mIG9jY2x1c2lvbikKK3N0YXRpYyBpbmxpbmUgSW50UmVjdCBjb21wdXRlVW5vY2Ns
dWRlZENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBDQ0Zsb2F0U2Npc3Nv
clJlY3QmIHNjaXNzb3JSZWN0LCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKIHsKLSAgICBGbG9h
dFF1YWQgdHJhbnNmb3JtZWRRdWFkID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxv
YXRRdWFkKGNvbnRlbnRSZWN0KSk7Ci0gICAgaWYgKCF0cmFuc2Zvcm1lZFF1YWQuaXNSZWN0aWxp
bmVhcigpKQotICAgICAgICByZXR1cm4gY29udGVudFJlY3Q7Ci0gICAgLy8gVGFrZSB0aGUgZW5j
bG9zaW5nSW50UmVjdCBhdCBlYWNoIHN0ZXAgaGVyZSwgYXMgd2Ugd2FudCB0byBjb250YWluIGFu
eSB1bm9jY2x1ZGVkIHBhcnRpYWwgcGl4ZWxzIGluIHRoZSByZXN1bHRpbmcgSW50UmVjdC4KLSAg
ICBJbnRSZWN0IHNocnVua1JlY3QgPSByZWN0U3VidHJhY3RSZWdpb24oZW5jbG9zaW5nSW50UmVj
dCh0cmFuc2Zvcm1lZFF1YWQuYm91bmRpbmdCb3goKSksIG9jY2x1c2lvbik7CisgICAgRmxvYXRS
ZWN0IHRyYW5zZm9ybWVkUmVjdCA9IGludGVyc2VjdGlvbihjb250ZW50U3BhY2VUcmFuc2Zvcm0u
bWFwUmVjdChGbG9hdFJlY3QoY29udGVudFJlY3QpKSwgc2Npc3NvclJlY3QpOworICAgIC8vIFRh
a2UgdGhlIGVuY2xvc2luZ0ludFJlY3QgYXQgZWFjaCBzdGVwLCBhcyB3ZSB3YW50IHRvIGNvbnRh
aW4gYW55IHVub2NjbHVkZWQgcGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3VsdGluZyBJbnRSZWN0
LgorICAgIEludFJlY3Qgc2hydW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihlbmNsb3NpbmdJ
bnRSZWN0KHRyYW5zZm9ybWVkUmVjdCksIG9jY2x1c2lvbik7CiAgICAgSW50UmVjdCB1bm9jY2x1
ZGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29udGVudFNwYWNlVHJhbnNmb3JtLmludmVyc2Uo
KS5tYXBSZWN0KEZsb2F0UmVjdChzaHJ1bmtSZWN0KSkpOwotICAgIC8vIFRoZSB1c2Ugb2YgZW5j
bG9zaW5nSW50UmVjdCwgd2l0aCBmbG9hdGluZyBwb2ludCByb3VuZGluZywgY2FuIGdpdmUgdXMg
YSByZXN1bHQgdGhhdCBpcyBub3QgYSBzdWItcmVjdCBvZiBjb250ZW50UmVjdCwgYnV0IG91cgot
ICAgIC8vIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYSBzdWItcmVjdC4KKyAgICAvLyBUaGUgcmVj
dCBiYWNrIGluIGNvbnRlbnQgc3BhY2UgaXMgYSBib3VuZGluZyBib3ggYW5kIG1heSBleHRlbmQg
b3V0c2lkZSBvZiB0aGUgb3JpZ2luYWwgY29udGVudFJlY3QsIHNvIGNsYW1wIGl0IHRvIHRoZSBj
b250ZW50UmVjdEJvdW5kcy4KICAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRSZWN0
LCBjb250ZW50UmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBM
YXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAg
ICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBjb250ZW50UmVjdDsKIApAQCAtMjgxLDggKzI4MywxMCBAQCBJbnRS
ZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46
OnVub2NjbHVkZWRDb250ZW50UgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1Nj
cmVlblNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXll
cik7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNv
bnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAKLSAgICBJ
bnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
Y29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNp
b25JblNjcmVlbik7Ci0gICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCk7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVk
SW5TY3JlZW4gPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250
ZW50VG9TY3JlZW5TcGFjZSwgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKCksIG1fc3RhY2subGFz
dCgpLm9jY2x1c2lvbkluU2NyZWVuKTsKKyAgICBpZiAodW5vY2NsdWRlZEluU2NyZWVuLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJ
blRhcmdldCA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRl
bnRUb1RhcmdldFN1cmZhY2UsIHNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKCksIG1fc3RhY2su
bGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0KTsKIAogICAgIHJldHVybiBpbnRlcnNlY3Rpb24odW5v
Y2NsdWRlZEluU2NyZWVuLCB1bm9jY2x1ZGVkSW5UYXJnZXQpOwogfQpAQCAtMjkwLDI1ICsyOTQs
MzUgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udGVudFIKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNv
bnRlbnRSZWN0KSBjb25zdAogewotICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkg
bGF5ZXJzIGRyYXdpbmcgaW50byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNlIG9jY2x1c2lvbiBm
cm9tIG9uZSBzcG90IGRvd24gb24gdGhlIHN0YWNrLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8
IDIpCi0gICAgICAgIHJldHVybiBzdXJmYWNlQ29udGVudFJlY3Q7Ci0KKyAgICBBU1NFUlQoIW1f
c3RhY2suaXNFbXB0eSgpKTsKICAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAg
ICAgQVNTRVJUKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFj
ZSk7CiAKLSAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIHJlY3QgdGhhdCBjb250YWlucyBhbGwg
dGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBib3RoIHNjcmVlbiBzcGFjZSBh
bmQgaW4gdGhlIHRhcmdldCBzdXJmYWNlLgotICAgIC8vIFNvIHdlIGZpbmQgdGhlIHZpc2libGUg
cGFydHMgb2YgfGNvbnRlbnRSZWN0fCBpbiBlYWNoIHNwYWNlLCBhbmQgdGFrZSB0aGUgaW50ZXJz
ZWN0aW9uLgorICAgIEludFJlY3Qgc3VyZmFjZUNsaXBwZWRDb250ZW50UmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoaW50ZXJzZWN0aW9uKHN1cmZhY2VDb250ZW50UmVjdCwgc2Npc3NvclJlY3RJblRh
cmdldFN1cmZhY2UoKSkpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2Ny
ZWVuU3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVy
KTsKKyAgICAvLyBBIHN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IGxheWVycyBkcmF3aW5nIGlu
dG8gaXRzZWxmLCBzbyB3ZSBuZWVkIHRvIHVzZSBvY2NsdXNpb24gZnJvbSBvbmUgc3BvdCBkb3du
IG9uIHRoZSBzdGFjay4KKyAgICBSZWdpb24gb2NjbHVzaW9uOworICAgIGlmIChtX3N0YWNrLnNp
emUoKSA+PSAyKQorICAgICAgICBvY2NsdXNpb24gPSBtX3N0YWNrW21fc3RhY2suc2l6ZSgpLTJd
Lm9jY2x1c2lvbkluU2NyZWVuOwogCi0gICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3Qg
PSBtX3N0YWNrW21fc3RhY2suc2l6ZSgpLTJdOwotICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2Ny
ZWVuID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ29udGVudFJlY3QsIGNv
bnRlbnRUb1NjcmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKTsKKyAgICBJ
bnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
c3VyZmFjZUNsaXBwZWRDb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08
TGF5ZXJUeXBlPihsYXllciksIHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSgpLCBvY2NsdXNpb24p
OwogCiAgICAgcmV0dXJuIHVub2NjbHVkZWRJblNjcmVlbjsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDRmxvYXRTY2lzc29y
UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+
OjpzY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENDRmxv
YXRTY2lzc29yUmVjdChtX3N0YWNrLmxhc3QoKS5zdXJmYWNlLT5zY2lzc29yUmVjdChtX3VzZVN1
cmZhY2VEYW1hZ2UpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFt
ZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDRmxvYXRTY2lzc29yUmVjdCBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpzY2lzc29yUmVjdEluU2NyZWVu
U3BhY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZT4KIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdAog
ewogICAgIEFTU0VSVCghbV9zdGFjay5pc0VtcHR5KCkpOwpAQCAtMzM0LDYgKzM0OCw4IEBAIHRl
bXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0+Ojp1CiB0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6c3VyZmFjZVVub2Nj
bHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgc3Vy
ZmFjZUNvbnRlbnRSZWN0KSBjb25zdDsKIHRlbXBsYXRlIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpjdXJy
ZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogdGVtcGxhdGUgY29uc3QgUmVnaW9u
JiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJv
bWl1bT46OmN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdDsKK3RlbXBsYXRl
IENDRmxvYXRTY2lzc29yUmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0s
IFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OnNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKCkgY29u
c3Q7Cit0ZW1wbGF0ZSBDQ0Zsb2F0U2Npc3NvclJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpzY2lzc29yUmVjdEluU2NyZWVu
U3BhY2UoKSBjb25zdDsKIAogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPEND
TGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29u
c3QgQ0NSZW5kZXJTdXJmYWNlKiBuZXdUYXJnZXQpOwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpmaW5pc2hlZFRhcmdl
dFJlbmRlclN1cmZhY2UoY29uc3QgQ0NMYXllckltcGwqIG93bmluZ0xheWVyLCBjb25zdCBDQ1Jl
bmRlclN1cmZhY2UqIGZpbmlzaGVkVGFyZ2V0KTsKQEAgLTM0NSw2ICszNjEsOCBAQCB0ZW1wbGF0
ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3Vy
ZmFjZT46OnVub2NjbHVkZQogdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNvbnN0IENDTGF5ZXJJbXBsKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0
KSBjb25zdDsKIHRlbXBsYXRlIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxD
Q0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3Bh
Y2UoKSBjb25zdDsKIHRlbXBsYXRlIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6Y3VycmVudE9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpIGNvbnN0OwordGVtcGxhdGUgQ0NGbG9hdFNjaXNzb3JSZWN0IENDT2NjbHVzaW9u
VHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OnNjaXNzb3JSZWN0SW5U
YXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0ZW1wbGF0ZSBDQ0Zsb2F0U2Npc3NvclJlY3QgQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6c2Npc3NvclJl
Y3RJblNjcmVlblNwYWNlKCkgY29uc3Q7CiAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaAppbmRleCBkMWM4MzNlMWE5YmE0ZWVkZTlhYmRm
NDMwMjFlN2VkN2I0YzRmZjE2Li5kMjM0ZTNmMjNmZGUzMjNmZDBkNDg3YmIxNzI0ZTk2OWNhNjlh
NWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NTY2lzc29yUmVjdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0xheWVySW1wbDsKQEAgLTQzLDggKzQ0LDEz
IEBAIGNsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1bTsKIC8vIEZpbmFsbHksIG9uY2UgZmluaXNo
ZWQgd2l0aCB0aGUgbGF5ZXIsIG9jY2x1c2lvbiBiZWhpbmQgdGhlIGxheWVyIHNob3VsZCBiZSBt
YXJrZWQgYnkgY2FsbGluZyBtYXJrT2NjbHVkZWRCZWhpbmRMYXllcigpLgogdGVtcGxhdGU8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIGNsYXNzIENDT2Nj
bHVzaW9uVHJhY2tlckJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDT2NjbHVzaW9u
VHJhY2tlckJhc2UpOwogcHVibGljOgotICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2UoKSB7IH0K
KyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlKCkgOiBtX3VzZVN1cmZhY2VEYW1hZ2UoZmFsc2Up
IHsgfQorICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2UoYm9vbCB1c2VTdXJmYWNlRGFtYWdlLCBG
bG9hdFJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKQorICAgICAgICA6IG1fc2Npc3NvclJl
Y3RJblNjcmVlblNwYWNlKHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSkKKyAgICAgICAgLCBtX3Vz
ZVN1cmZhY2VEYW1hZ2UodXNlU3VyZmFjZURhbWFnZSkKKyAgICB7IH0KIAogICAgIC8vIENhbGxl
ZCB3aGVuIHZpc2l0aW5nIGEgbGF5ZXIgcmVwcmVzZW50aW5nIGl0c2VsZi4gSWYgdGhlIHRhcmdl
dCB3YXMgbm90IGFscmVhZHkgY3VycmVudCwgdGhlbiB0aGlzIGluZGljYXRlcyB3ZSBoYXZlIGVu
dGVyZWQgYSBuZXcgc3VyZmFjZSBzdWJ0cmVlLgogICAgIHZvaWQgZW50ZXJUYXJnZXRSZW5kZXJT
dXJmYWNlKGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBuZXdUYXJnZXQpOwpAQCAtOTAsOCArOTYs
MTMgQEAgcHJvdGVjdGVkOgogICAgIC8vIFdlIG1lcmdlIHRoZSBvY2NsdXNpb24gYXQgdGhlIHRv
cCBvZiB0aGUgc3RhY2sgd2l0aCB0aGUgbmV3IGN1cnJlbnQgc3VidHJlZS4gVGhpcyBuZXcgdGFy
Z2V0IGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjayBpZiBub3QgYWxyZWFkeSB0aGVyZS4KICAgICBW
ZWN0b3I8U3RhY2tPYmplY3QsIDE+IG1fc3RhY2s7CiAKKyAgICAvLyBBbGxvdyB0ZXN0cyB0byBv
dmVycmlkZSB0aGVzZS4KKyAgICB2aXJ0dWFsIENDRmxvYXRTY2lzc29yUmVjdCBzY2lzc29yUmVj
dEluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgQ0NGbG9hdFNjaXNzb3JSZWN0
IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSgpIGNvbnN0OworCiBwcml2YXRlOgotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOworICAgIGJvb2wgbV91c2VT
dXJmYWNlRGFtYWdlOworICAgIENDRmxvYXRTY2lzc29yUmVjdCBtX3NjaXNzb3JSZWN0SW5TY3Jl
ZW5TcGFjZTsKIH07CiAKIHR5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IENDT2NjbHVzaW9uVHJhY2tlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IDE2OTk5OTgwOGU4ZTQwYTlhZTRiNzEzMGE5MzNi
M2E5ZTBkYzgzMGMuLmQwMDUxYTMzYjZiNTdkYzZkYzI5OGIxZDA2MTNhYjJmN2I1ODQ1OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMzEwLDUgKzMxMCwxOCBAQCBib29s
IENDUmVuZGVyU3VyZmFjZTo6c3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVzY2VuZGFu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZCAmJiAhbV9vd25p
bmdMYXllci0+bGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKTsKIH0KIAorQ0NGbG9hdFNjaXNzb3JSZWN0
IENDUmVuZGVyU3VyZmFjZTo6c2Npc3NvclJlY3QoYm9vbCB1c2VEYW1hZ2UpIGNvbnN0Cit7Cisg
ICAgQ0NGbG9hdFNjaXNzb3JSZWN0IHNjaXNzb3IgPSBDQ0Zsb2F0U2Npc3NvclJlY3Q6OmluZmlu
aXR5KCk7CisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXIt
PnBhcmVudCgpLT51c2VzTGF5ZXJDbGlwcGluZygpICYmIHVzZURhbWFnZSkgeworICAgICAgICBz
Y2lzc29yLmludGVyc2VjdChtX2NsaXBSZWN0KTsKKyAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3Qo
bV9kYW1hZ2VUcmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpKTsKKyAgICB9IGVsc2UgaWYgKHVz
ZURhbWFnZSkKKyAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3QobV9kYW1hZ2VUcmFja2VyLT5jdXJy
ZW50RGFtYWdlUmVjdCgpKTsKKyAgICBlbHNlIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAm
JiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICAgICAg
c2Npc3Nvci5pbnRlcnNlY3QobV9jbGlwUmVjdCk7CisgICAgcmV0dXJuIHNjaXNzb3I7Cit9CisK
IH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCmluZGV4IGU1ZTY4M2E1MjM2ZWFkNTk1NWE4YjM3ZGYxODdkZTFlZWZmODY3
ZDAuLmUyYTE0NDZjNDdjN2JkZjc0YTMyNzM5Yjc0OTFkNGI3Mzc3YWRhZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1h
bmFnZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NTY2lzc29yUmVjdC5oIgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTMsNiArMTE0
LDcgQEAgcHVibGljOgogICAgIGJvb2wgc3VyZmFjZVByb3BlcnR5Q2hhbmdlZE9ubHlGcm9tRGVz
Y2VuZGFudCgpIGNvbnN0OwogCiAgICAgQ0NEYW1hZ2VUcmFja2VyKiBkYW1hZ2VUcmFja2VyKCkg
Y29uc3QgeyByZXR1cm4gbV9kYW1hZ2VUcmFja2VyLmdldCgpOyB9CisgICAgQ0NGbG9hdFNjaXNz
b3JSZWN0IHNjaXNzb3JSZWN0KGJvb2wgdXNlRGFtYWdlKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICB2b2lkIGRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbCosIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgU2tCaXRtYXAmIGZpbHRlckJpdG1hcCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NjaXNzb3JSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NjaXNzb3JSZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzlkOWRkNDc5YmYzMDU0ZjFlMmQx
ZWQzNGJjYWU2YzhhZmYwNWYwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Npc3NvclJlY3QuaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ1NjaXNzb3JSZWN0X2gKKyNkZWZpbmUgQ0NTY2lzc29yUmVj
dF9oCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJpbWF0aXZlVHlwZSwgdHlw
ZW5hbWUgUmVjdFR5cGU+CitjbGFzcyBDQ1NjaXNzb3JSZWN0IHsKK3B1YmxpYzoKKyAgICBDQ1Nj
aXNzb3JSZWN0KCkgOiBtX2hhc0JvdW5kcyhmYWxzZSkgeyB9CisgICAgQ0NTY2lzc29yUmVjdChQ
cmltYXRpdmVUeXBlIHgsIFByaW1hdGl2ZVR5cGUgeSwgUHJpbWF0aXZlVHlwZSB3aWR0aCwgUHJp
bWF0aXZlVHlwZSBoZWlnaHQpIDogbV9ib3VuZHMoeCwgeSwgd2lkdGgsIGhlaWdodCksIG1faGFz
Qm91bmRzKHRydWUpIHsgfQorICAgIGV4cGxpY2l0IENDU2Npc3NvclJlY3QoY29uc3QgUmVjdFR5
cGUmIHJlY3QpIDogbV9ib3VuZHMocmVjdCksIG1faGFzQm91bmRzKHRydWUpIHsgfQorCisgICAg
c3RhdGljIENDU2Npc3NvclJlY3Q8UHJpbWF0aXZlVHlwZSwgUmVjdFR5cGU+IGluZmluaXR5KCkg
eyByZXR1cm4gQ0NTY2lzc29yUmVjdCgpOyB9CisKKyAgICBib29sIGhhc0JvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQm91bmRzOyB9CisKKyAgICBjb25zdCBSZWN0VHlwZSYgYm91bmRzKCkg
Y29uc3QgeyBBU1NFUlQobV9oYXNCb3VuZHMpOyByZXR1cm4gbV9ib3VuZHM7IH0KKworICAgIGNv
bnN0IFJlY3RUeXBlJiBpbnRlcnNlY3QoY29uc3QgUmVjdFR5cGUmIHJlY3QpCisgICAgeworICAg
ICAgICBtX2JvdW5kcyA9ICFtX2hhc0JvdW5kcyA/IHJlY3QgOiBpbnRlcnNlY3Rpb24obV9ib3Vu
ZHMsIHJlY3QpOworICAgICAgICBtX2hhc0JvdW5kcyA9IHRydWU7CisgICAgICAgIHJldHVybiBt
X2JvdW5kczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVjdFR5cGUgbV9ib3VuZHM7CisgICAg
Ym9vbCBtX2hhc0JvdW5kczsKK307CisKK3R5cGVkZWYgQ0NTY2lzc29yUmVjdDxpbnQsIEludFJl
Y3Q+IENDSW50U2Npc3NvclJlY3Q7Cit0eXBlZGVmIENDU2Npc3NvclJlY3Q8ZmxvYXQsIEZsb2F0
UmVjdD4gQ0NGbG9hdFNjaXNzb3JSZWN0OworCitpbmxpbmUgRmxvYXRSZWN0IGludGVyc2VjdGlv
bihjb25zdCBDQ0Zsb2F0U2Npc3NvclJlY3QmIHMsIGNvbnN0IEZsb2F0UmVjdCYgZikgeyByZXR1
cm4gIXMuaGFzQm91bmRzKCkgPyBmIDogaW50ZXJzZWN0aW9uKHMuYm91bmRzKCksIGYpOyB9Citp
bmxpbmUgRmxvYXRSZWN0IGludGVyc2VjdGlvbihjb25zdCBGbG9hdFJlY3QmIGYsIGNvbnN0IEND
RmxvYXRTY2lzc29yUmVjdCYgcykgeyByZXR1cm4gaW50ZXJzZWN0aW9uKHMsIGYpOyB9CisKK2lu
bGluZSBJbnRSZWN0IGludGVyc2VjdGlvbihjb25zdCBDQ0ludFNjaXNzb3JSZWN0JiBzLCBjb25z
dCBJbnRSZWN0JiBpKSB7IHJldHVybiAhcy5oYXNCb3VuZHMoKSA/IGkgOiBpbnRlcnNlY3Rpb24o
cy5ib3VuZHMoKSwgaSk7IH0KK2lubGluZSBJbnRSZWN0IGludGVyc2VjdGlvbihjb25zdCBJbnRS
ZWN0JiBpLCBjb25zdCBDQ0ludFNjaXNzb3JSZWN0JiBzKSB7IHJldHVybiBpbnRlcnNlY3Rpb24o
cywgaSk7IH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCmluZGV4IGU5MWUzMzZkYmRiM2VjYmRjOTRhOTRhYTBiMDI0NTljNzQ5
OGQ0OWIuLjA3ZWQ1MjMzYTE2OTI3Y2YwOGI4OGMzNGE2ZTk0NWExMDhkZDRkYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtODUsNiArODUsNyBAQAogICAgICAgICAgICAgJ3Rl
c3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxl
clRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1NjaXNzb3JSZWN0VGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IDY3OGVjOTY0NTJi
MGJhZWQ2ODdhZWY2NjY2MmRmM2Q4ZDUxMDVkYTguLjFiYjdiOWJiOTlmODBiNjUwMmYwOTViOGM0
ZThmNTIxNTcxY2Q0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtNzMsNiArNzMsMTcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRPY2NsdXNpb25JblNjcmVlblNwYWNlKGNvbnN0IFJlZ2lvbiYgcmVn
aW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3Jl
ZW4gPSByZWdpb247IH0KICAgICB2b2lkIHNldE9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZShjb25z
dCBSZWdpb24mIHJlZ2lvbikgeyBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9j
Y2x1c2lvbkluVGFyZ2V0ID0gcmVnaW9uOyB9CisKKyAgICB2b2lkIHNldFN1cmZhY2VTY2lzc29y
UmVjdChjb25zdCBDQ0Zsb2F0U2Npc3NvclJlY3QmIHJlY3QpIHsgbV9zdXJmYWNlU2Npc3NvclJl
Y3QgPSByZWN0O30KKyAgICB2b2lkIHNldFNjcmVlblNjaXNzb3JSZWN0KGNvbnN0IENDRmxvYXRT
Y2lzc29yUmVjdCYgcmVjdCkgeyBtX3NjcmVlblNjaXNzb3JSZWN0ID0gcmVjdDt9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIENDRmxvYXRTY2lzc29yUmVjdCBzY2lzc29yUmVjdEluVGFyZ2V0
U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjaXNzb3JSZWN0OyB9CisgICAgdmly
dHVhbCBDQ0Zsb2F0U2Npc3NvclJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JlZW5TY2lzc29yUmVjdDsgfQorCitwcml2YXRlOgorICAgIENDRmxvYXRT
Y2lzc29yUmVjdCBtX3N1cmZhY2VTY2lzc29yUmVjdDsKKyAgICBDQ0Zsb2F0U2Npc3NvclJlY3Qg
bV9zY3JlZW5TY2lzc29yUmVjdDsKIH07CiAKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCkBAIC0xMTcwLDQgKzExODEsNTI0IEBAIFRFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgb2NjbHVzaW9uSW50ZXJhY3Rpb25XaXRoRmlsdGVycykK
ICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKS5y
ZWN0cygpLnNpemUoKSk7CiB9CiAKKyNkZWZpbmUgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZB
Q0UocmVjdCwgbGF5ZXIsIHN1cmZhY2VsYXllcikgXAorICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChsYXllciwgcmVjdCkpOyBcCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1
cmZhY2VPY2NsdWRlZChzdXJmYWNlbGF5ZXIsIHJlY3QpKTsKKworI2RlZmluZSBFWFBFQ1RfTk9U
X09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UocmVjdCwgbGF5ZXIsIHN1cmZhY2VsYXllcikgXAorICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIsIHJlY3QpKTsgXAorICAgIEVY
UEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKHN1cmZhY2VsYXllciwgcmVjdCkp
OworCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VTY2lzc29yUmVjdE92ZXJU
aWxlKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7Cisg
ICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRl
cnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxF
KSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNl
dEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKwor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdXNpb24uc2V0U3VyZmFj
ZVNjaXNzb3JSZWN0KENDRmxvYXRTY2lzc29yUmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKTsKKwor
ICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVE
RURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwg
bGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNU
X09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXll
ci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQo
KSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkp
OworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJl
bnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50
TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwg
MTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRM
YXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdl
dCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZB
Q0UoSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExh
eWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAs
IDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAyMDAsIDEwMCwg
MTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVu
dExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIG9jY2x1c2lv
bi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAw
LCAzMDAsIDMwMCkpKTsKK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzY3JlZW5T
Y2lzc29yUmVjdE92ZXJUaWxlKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVz
aW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExh
eWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIg
PSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Cisg
ICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChw
YXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJP
cGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJh
dGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7
CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAy
MDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1t
eUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2Ns
dXNpb24uc2V0U2NyZWVuU2Npc3NvclJlY3QoQ0NGbG9hdFNjaXNzb3JSZWN0KDIwMCwgMTAwLCAx
MDAsIDEwMCkpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXll
ci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNF
KEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAg
IEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCks
IGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAx
MDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0
KCksIGxheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNl
KHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5k
ZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09D
Q0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVy
LmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVu
dExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0
KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAs
IDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNU
X05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwg
cGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVE
RURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5n
ZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJG
QUNFKEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRM
YXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgx
MDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEw
MCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9j
Y2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAs
IDMwMCwgMzAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDEwMCwg
MTAwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgp
LCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIHN1cmZhY2VTY2lzc29yUmVjdE92ZXJDdWxsZWRUaWxlKQoreworICAgIFRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChs
YXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVy
YXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXIt
PnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisKKyAgICBvY2NsdXNpb24uc2V0U3VyZmFjZVNjaXNzb3JSZWN0KENDRmxvYXRT
Y2lzc29yUmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRh
cmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0
KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRS
ZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxh
eWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdl
dCgpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQo
KSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVS
X1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJl
bnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAw
LCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVD
VF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgcGFy
ZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdl
dCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZB
Q0UoSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExh
eWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAs
IDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAyMDAsIDEwMCwg
MTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVu
dExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMCwgMCwgMzAwLCAzMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworfQorCitU
RVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNzb3JSZWN0T3ZlckN1bGxlZFRp
bGUpCit7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAg
ICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVy
czsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUp
KTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0
RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAg
IGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5zZXRTY3JlZW5T
Y2lzc29yUmVjdChDQ0Zsb2F0U2Npc3NvclJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSk7CisKKyAg
ICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVE
X0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxh
eWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEw
MCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9O
T1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIGxh
eWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVo
aW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFy
Z2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVY
UEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBwYXJl
bnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgp
LCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwg
MTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7Cisg
ICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAx
MDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9P
Q0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExh
eWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVS
X1NVUkZBQ0UoSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBh
cmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRS
ZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5n
ZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDIw
MCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworCisg
ICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIG9jY2x1c2lvbi5z
dXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAz
MDAsIDMwMCkpKTsKK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlU2Np
c3NvclJlY3RPdmVyUGFydGlhbFRpbGVzKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIg
b2NjbHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBh
cmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRD
aGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBG
aWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5k
KEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmls
dGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwg
MzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5
ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKwor
ICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAg
ICBvY2NsdXNpb24uc2V0U3VyZmFjZVNjaXNzb3JSZWN0KENDRmxvYXRTY2lzc29yUmVjdCg1MCwg
NTAsIDIwMCwgMjAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNl
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0
KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEw
MCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBsYXllci5n
ZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFD
RShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7
CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRM
YXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJG
QUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5
ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwg
MTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7Cisg
ICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAw
KSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0ND
TFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExh
eWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0
KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVu
dExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50
UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdl
dCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAs
IDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAx
MDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBv
Y2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwg
MzAwLCAzMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDUwLCA1MCwgNTAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAwLCAzMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCA1
MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIw
MCwgMTAwLCA1MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAwLCAyMDAsIDEwMCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2NsdXNpb24uc3VyZmFj
ZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAz
MDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgNTApLCBvY2Ns
dXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MCwgMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgMTAwLCAy
MDAsIDEwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjAwLCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCAyMDAsIDEwMCwgNTApLCBvY2NsdXNpb24uc3Vy
ZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAs
IDEwMCwgMTAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNj
aXNzb3JSZWN0T3ZlclBhcnRpYWxUaWxlcykKK3sKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2Vy
IG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBw
YXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+
IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRk
Q2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAg
RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVu
ZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0
ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZp
bHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAs
IDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExh
eWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisK
KyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgb2NjbHVzaW9uLnNldFNjcmVlblNjaXNzb3JSZWN0KENDRmxvYXRTY2lzc29yUmVjdCg1MCwg
NTAsIDIwMCwgMjAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNl
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0
KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEw
MCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBsYXllci5n
ZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFD
RShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7
CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRM
YXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJG
QUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5
ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwg
MTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7Cisg
ICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAw
KSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0ND
TFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExh
eWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0
KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVu
dExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50
UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdl
dCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAs
IDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAx
MDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBv
Y2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwg
MzAwLCAzMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDUwLCA1MCwgNTAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAwLCAzMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCA1
MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIw
MCwgMTAwLCA1MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAwLCAyMDAsIDEwMCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2NsdXNpb24uc3VyZmFj
ZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAz
MDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgNTApLCBvY2Ns
dXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MCwgMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgMTAwLCAy
MDAsIDEwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjAwLCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCAyMDAsIDEwMCwgNTApLCBvY2NsdXNpb24uc3Vy
ZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAs
IDEwMCwgMTAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VT
Y2lzc29yUmVjdE92ZXJOb1RpbGVzKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2Nj
bHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVu
dExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGls
ZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0
ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9w
ZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVy
cyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAw
LCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBv
Y2NsdXNpb24uc2V0U3VyZmFjZVNjaXNzb3JSZWN0KENDRmxvYXRTY2lzc29yUmVjdCg1MDAsIDUw
MCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2Uo
bGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBUaGVzZSBhcmUgYWZmZWN0ZWQgYnkg
dGhlIGNsaXAgcmVjdC4KKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5n
ZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKElu
dFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDAp
LCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRl
ZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRl
clRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAg
ICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwg
cGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVE
RURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5n
ZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJG
QUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRM
YXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgx
MDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEw
MCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBF
Q1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJl
bnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgp
LCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5
ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAw
LCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsK
KworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDAsIDEwMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAx
MDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSku
aXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1w
dHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMTAwKSkuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc2NyZWVuU2Npc3NvclJlY3RPdmVyTm9UaWxlcykKK3sK
KyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVu
dC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAg
IGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAg
IHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJz
KGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXll
ci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygp
KSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBh
cmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJl
bnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLnNldFNjcmVlblNjaXNzb3JS
ZWN0KENDRmxvYXRTY2lzc29yUmVjdCg1MDAsIDUwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1
c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisK
KyAgICAvLyBUaGVzZSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNsaXAgcmVjdC4KKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0
KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRS
ZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxh
eWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZB
Q0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkp
OworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsK
KyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJT
dXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50
TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExh
eWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAs
IDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEw
MCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09D
Q0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRM
YXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCks
IHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJ
bnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMjAw
LCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDAp
LCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5
ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFy
Z2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAx
MDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDAsIDAsIDMwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAw
LCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAx
MDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VV
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAs
IDEwMCkpLmlzRW1wdHkoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2Npc3NvclJlY3RUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTY2lzc29yUmVjdFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBi
OWYwMWIzOWE3MTBmMTBiODI4ODFhMDFiZDUxMDI1ZDZhNjE5NjcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2Npc3NvclJlY3RUZXN0LmNwcApAQCAt
MCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiY2MvQ0NTY2lzc29yUmVjdC5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2Rl
ZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCisgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7
IFwKKyAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAorICAgIEVYUEVDVF9FUShhLndpZHRo
KCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7
CisKK25hbWVzcGFjZSB7CisKK1RFU1QoQ0NTY2lzc29yUmVjdFRlc3QsIGNvbnN0cnVjdG9ycykK
K3sKKyAgICBDQ0Zsb2F0U2Npc3NvclJlY3QgZmxvYXRJbmY7CisgICAgRVhQRUNUX0ZBTFNFKGZs
b2F0SW5mLmhhc0JvdW5kcygpKTsKKworICAgIENDSW50U2Npc3NvclJlY3QgaW50SW5mOworICAg
IEVYUEVDVF9GQUxTRShpbnRJbmYuaGFzQm91bmRzKCkpOworCisgICAgQ0NGbG9hdFNjaXNzb3JS
ZWN0IGZsb2F0U2l6ZWQoMTAuNiwgMTAuNiwgMzAuMSwgMzAuMSk7CisgICAgRVhQRUNUX1RSVUUo
ZmxvYXRTaXplZC5oYXNCb3VuZHMoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoRmxvYXRSZWN0KDEw
LjYsIDEwLjYsIDMwLjEsIDMwLjEpLCBmbG9hdFNpemVkLmJvdW5kcygpKTsKKworICAgIENDSW50
U2Npc3NvclJlY3QgaW50U2l6ZWQoMTAsIDEwLCAzMCwgMzApOworICAgIEVYUEVDVF9UUlVFKGlu
dFNpemVkLmhhc0JvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChGbG9hdFJlY3QoMTAsIDEw
LCAzMCwgMzApLCBpbnRTaXplZC5ib3VuZHMoKSk7CisKKyAgICBGbG9hdFJlY3QgZmxvYXRSZWN0
KDEwLjYsIDEwLjYsIDMwLjEsIDMwLjEpOworICAgIENDRmxvYXRTY2lzc29yUmVjdCBmbG9hdEZy
b21SZWN0KGZsb2F0UmVjdCk7CisgICAgRVhQRUNUX1RSVUUoZmxvYXRGcm9tUmVjdC5oYXNCb3Vu
ZHMoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoZmxvYXRSZWN0LCBmbG9hdEZyb21SZWN0LmJvdW5k
cygpKTsKKworICAgIEludFJlY3QgaW50UmVjdCgxMC42LCAxMC42LCAzMC4xLCAzMC4xKTsKKyAg
ICBDQ0ludFNjaXNzb3JSZWN0IGludEZyb21SZWN0KGludFJlY3QpOworICAgIEVYUEVDVF9UUlVF
KGludEZyb21SZWN0Lmhhc0JvdW5kcygpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRSZWN0LCBp
bnRGcm9tUmVjdC5ib3VuZHMoKSk7Cit9CisKK1RFU1QoQ0NTY2lzc29yUmVjdFRlc3QsIGludGVy
c2VjdCkKK3sKKyAgICBGbG9hdFJlY3QgZmxvYXRSZWN0KDEwLCAxMCwgMzAsIDMwKTsKKyAgICBD
Q0Zsb2F0U2Npc3NvclJlY3QgZmxvYXRTY2lzc29yOworICAgIGZsb2F0U2Npc3Nvci5pbnRlcnNl
Y3QoZmxvYXRSZWN0KTsKKyAgICBFWFBFQ1RfVFJVRShmbG9hdFNjaXNzb3IuaGFzQm91bmRzKCkp
OworICAgIEVYUEVDVF9FUV9SRUNUKGZsb2F0UmVjdCwgZmxvYXRTY2lzc29yLmJvdW5kcygpKTsK
KworICAgIEludFJlY3QgaW50UmVjdCgxMCwgMTAsIDMwLCAzMCk7CisgICAgQ0NJbnRTY2lzc29y
UmVjdCBpbnRTY2lzc29yOworICAgIGludFNjaXNzb3IuaW50ZXJzZWN0KGludFJlY3QpOworICAg
IEVYUEVDVF9UUlVFKGludFNjaXNzb3IuaGFzQm91bmRzKCkpOworICAgIEVYUEVDVF9FUV9SRUNU
KGludFJlY3QsIGludFNjaXNzb3IuYm91bmRzKCkpOworCit9CisKK1RFU1QoQ0NTY2lzc29yUmVj
dFRlc3QsIGludGVyc2VjdGlvbikKK3sKKyAgICBGbG9hdFJlY3QgZmxvYXRSZWN0KDEwLCAxMCwg
MzAsIDMwKTsKKworICAgIENDRmxvYXRTY2lzc29yUmVjdCBmbG9hdFNjaXNzb3JJbmY7CisgICAg
Q0NGbG9hdFNjaXNzb3JSZWN0IGZsb2F0U2Npc3Nvckluc2lkZSgxNSwgMTUsIDEwLCAxMCk7Cisg
ICAgQ0NGbG9hdFNjaXNzb3JSZWN0IGZsb2F0U2Npc3Nvck91dHNpZGUoNTAsIDUwLCAxMCwgMTAp
OworICAgIENDRmxvYXRTY2lzc29yUmVjdCBmbG9hdFNjaXNzb3JDcm9zc2VzKDE1LCAwLCAxMCwg
ODApOworCisgICAgRVhQRUNUX0VRX1JFQ1QoZmxvYXRSZWN0LCBpbnRlcnNlY3Rpb24oZmxvYXRS
ZWN0LCBmbG9hdFNjaXNzb3JJbmYpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChmbG9hdFNjaXNzb3JJ
bnNpZGUuYm91bmRzKCksIGludGVyc2VjdGlvbihmbG9hdFJlY3QsIGZsb2F0U2Npc3Nvckluc2lk
ZSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEZsb2F0UmVjdCgpLCBpbnRlcnNlY3Rpb24oZmxvYXRS
ZWN0LCBmbG9hdFNjaXNzb3JPdXRzaWRlKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoRmxvYXRSZWN0
KDE1LCAxMCwgMTAsIDMwKSwgaW50ZXJzZWN0aW9uKGZsb2F0UmVjdCwgZmxvYXRTY2lzc29yQ3Jv
c3NlcykpOworCisgICAgSW50UmVjdCBpbnRSZWN0KDEwLCAxMCwgMzAsIDMwKTsKKworICAgIEND
SW50U2Npc3NvclJlY3QgaW50U2Npc3NvckluZjsKKyAgICBDQ0ludFNjaXNzb3JSZWN0IGludFNj
aXNzb3JJbnNpZGUoMTUsIDE1LCAxMCwgMTApOworICAgIENDSW50U2Npc3NvclJlY3QgaW50U2Np
c3Nvck91dHNpZGUoNTAsIDUwLCAxMCwgMTApOworICAgIENDSW50U2Npc3NvclJlY3QgaW50U2Np
c3NvckNyb3NzZXMoMTUsIDAsIDEwLCA4MCk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRSZWN0
LCBpbnRlcnNlY3Rpb24oaW50UmVjdCwgaW50U2Npc3NvckluZikpOworICAgIEVYUEVDVF9FUV9S
RUNUKGludFNjaXNzb3JJbnNpZGUuYm91bmRzKCksIGludGVyc2VjdGlvbihpbnRSZWN0LCBpbnRT
Y2lzc29ySW5zaWRlKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBpbnRlcnNlY3Rp
b24oaW50UmVjdCwgaW50U2Npc3Nvck91dHNpZGUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDE1LCAxMCwgMTAsIDMwKSwgaW50ZXJzZWN0aW9uKGludFJlY3QsIGludFNjaXNzb3JDcm9z
c2VzKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129711</attachid>
            <date>2012-03-01 08:35:15 -0800</date>
            <delta_ts>2012-03-01 21:59:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79927-20120301113514.patch</filename>
            <type>text/plain</type>
            <size>72048</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdjOTUwMTZiZGEwN2Vh
ZTE3MWEzYTJmMWFmYjUwYjYxZmRiZjkxOC4uZDBjZDI5NGU4YzRhZDIyM2JjNjAzOGU2NWFmMmU5
OWY4M2FhM2IxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAyLTI5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBsb2dpYyB0byBDQ09j
Y2x1c2lvblRyYWNrZXIgdG8gY2xpcCBxdWVyaWVzIHRvIHRoZSBjdXJyZW50CisgICAgICAgIHRh
cmdldCdzIHNjaXNzb3IgcmVjdC4gV2hlbiB0cmFja2luZyBkYW1hZ2UgZm9yIHBhcnRpYWwgc3dh
cHMsCisgICAgICAgIHRoaXMgc2Npc3NvciBpcyBjb250YWluZWQgd2l0aGluIHRoZSBkYW1hZ2Ug
cmVjdC4KKworICAgICAgICBVc2VzIGEgbmV3IENDTWF5YmVSZWN0IGNsYXNzIHRoYXQgY2FuIG9w
dGlvbmFsbHkgaG9sZCBhIFJlY3QsIGFuZAorICAgICAgICB0aGF0IGlzIHVzZWQgZm9yIGludGVy
c2VjdGlvbiB3aXRoIFJlY3RzLgorCisgICAgICAgIFVuaXQgdGVzdHM6IENDT2NjbHVzaW9uVHJh
Y2tlclRlc3Quc3VyZmFjZVNjaXNzb3JSZWN0T3ZlclRpbGUKKyAgICAgICAgICAgICAgICAgICAg
Q0NPY2NsdXNpb25UcmFja2VyVGVzdC5zdXJmYWNlU2Npc3NvclJlY3RPdmVyQ3VsbGVkVGlsZQor
ICAgICAgICAgICAgICAgICAgICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0LnN1cmZhY2VTY2lzc29y
UmVjdE92ZXJQYXJ0aWFsVGlsZXMKKyAgICAgICAgICAgICAgICAgICAgQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdC5zdXJmYWNlU2Npc3NvclJlY3RPdmVyTm9UaWxlcworICAgICAgICAgICAgICAgICAg
ICBDQ09jY2x1c2lvblRyYWNrZXJUZXN0LnNjcmVlblNjaXNzb3JSZWN0T3ZlclRpbGUKKyAgICAg
ICAgICAgICAgICAgICAgQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5zY3JlZW5TY2lzc29yUmVjdE92
ZXJDdWxsZWRUaWxlCisgICAgICAgICAgICAgICAgICAgIENDT2NjbHVzaW9uVHJhY2tlclRlc3Qu
c2NyZWVuU2Npc3NvclJlY3RPdmVyUGFydGlhbFRpbGVzCisgICAgICAgICAgICAgICAgICAgIEND
T2NjbHVzaW9uVHJhY2tlclRlc3Quc2NyZWVuU2Npc3NvclJlY3RPdmVyTm9UaWxlcworICAgICAg
ICAgICAgICAgICAgICBDQ01heWJlUmVjdFRlc3QuY29uc3RydWN0b3JzCisgICAgICAgICAgICAg
ICAgICAgIENDTWF5YmVSZWN0VGVzdC5pbnRlcnNlY3QKKyAgICAgICAgICAgICAgICAgICAgQ0NN
YXliZVJlY3RUZXN0LmludGVyc2VjdGlvbgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzY2lzc29yUmVjdCk6
CisgICAgICAgIChSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjo6Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRlc3RD
b250ZW50UmVjdE9jY2x1ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6b2NjbHVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6OjpzdXJmYWNlT2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjo6OnVub2NjbHVk
ZWRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjo6OnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6OjpzY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6c2Npc3NvclJlY3RJ
blNjcmVlblNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q09jY2x1c2lvblRyYWNrZXIuaDoKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6Q0NPY2NsdXNpb25UcmFj
a2VyQmFzZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2Npc3Nv
clJlY3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF5YmVSZWN0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ01heWJlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ01heWJlUmVjdDo6Q0NNYXliZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NNYXliZVJlY3Q6Om5vbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NNYXliZVJlY3Q6Omhh
c0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ01heWJlUmVjdDo6Ym91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTWF5YmVSZWN0OjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
aW50ZXJzZWN0aW9uKToKKwogMjAxMi0wMi0yOCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIERPTSBjb3VudGVyIGdy
YXBocyBvdXQgb2YgZXhwZXJpbWVudGFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDIw
N2ZlODNlOTEwYTMxYTA0MjYyNzZjMjNhNmQ2YzBkNDgzNjhiMDkuLmIyNTM3ZjQyYjJkN2JjMGY0
NWY5YmUxNmE4NGE1NDEyYTcxZGY3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjcgQEAKKzIwMTItMDItMjkgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgY2xpcHBpbmcgdG8gc2Npc3NvciByZWN0IHRv
IENDT2NjbHVzaW9uVHJhY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzk5MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDT2NjbHVzaW9uVHJh
Y2tlclRlc3QuY3BwOgorICAgICAgICAoVGVzdENDT2NjbHVzaW9uVHJhY2tlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRTdXJmYWNlU2Npc3NvclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6c2V0U2NyZWVuU2Np
c3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6c2tp
cFN1cmZhY2VTY2lzc29yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25U
cmFja2VyOjpza2lwU2NyZWVuU2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEND
T2NjbHVzaW9uVHJhY2tlcjo6cmVzZXRTdXJmYWNlU2Npc3NvclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6cmVzZXRTY3JlZW5TY2lzc29yUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzY2lzc29yUmVjdEluVGFy
Z2V0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpz
Y2lzc29yUmVjdEluU2NyZWVuU3BhY2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ01heWJlUmVjdFRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTIt
MDItMjggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDc5MTcgYW5kIHIxMDkxODguCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggYWUxZWFjNzdkZjNhODFkMWZhMTc1ZmMzYmQ2ODM2MjEzOGQ5NzAyZS4uOGQ1
NWRjMTZlYTQyNGVkYjk1MmIzNmUwZGU1Y2VmYWVlMTI0YmNkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzMyNSw2ICszMzI1LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXliZVJlY3QuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5oCmluZGV4IDkwNDU0MjViYzNmYmZmMjNjODIxZmZmZThhNGJiMDczOTViMGUyOGMu
LjM4ZDM5MTQzMzk4NTM2MDU0YmM1YzdkN2U1YTkyMWU4OGE4ODk4YTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC05MSw2ICs5MSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscyhSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHN1cmZhY2UpIHsgbV9uZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSBzdXJmYWNlOyB9
CiAgICAgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92
ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX25lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVs
czsgfQogCisgICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KGJvb2wgLyogdXNlRGFtYWdlICovKSBj
b25zdCB7IHJldHVybiBjb250ZW50UmVjdCgpOyB9CisKIHByaXZhdGU6CiAgICAgTGF5ZXJDaHJv
bWl1bSogbV9vd25pbmdMYXllcjsKICAgICBMYXllckNocm9taXVtKiBtX21hc2tMYXllcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TWF5YmVSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ01heWJlUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjZmE5NjI3NzY0NjJiZWZkNjJjYmI1OGQwN2U1
MTk4NWMyOWZjODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01heWJlUmVjdC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDTWF5YmVSZWN0X2gKKyNkZWZpbmUgQ0NNYXliZVJlY3RfaAorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIEEgY2xhc3MgdGhhdCBjYW4gb3B0aW9uYWxseSBjb250YWluIGEgcmVjdC4gV2hl
biB0aGVyZSBpcyBubyByZWN0IHByZXNlbnQsIGludGVyc2VjdGlvbiBpcyBhIG5vLW9wIGFuZCBy
ZXR1cm5zIHRoZSBvdGhlciByZWN0LgordGVtcGxhdGU8dHlwZW5hbWUgUHJpbWF0aXZlVHlwZSwg
dHlwZW5hbWUgUmVjdFR5cGU+CitjbGFzcyBDQ01heWJlUmVjdCB7CitwdWJsaWM6CisgICAgQ0NN
YXliZVJlY3QoKSA6IG1faGFzQm91bmRzKGZhbHNlKSB7IH0KKyAgICBDQ01heWJlUmVjdChQcmlt
YXRpdmVUeXBlIHgsIFByaW1hdGl2ZVR5cGUgeSwgUHJpbWF0aXZlVHlwZSB3aWR0aCwgUHJpbWF0
aXZlVHlwZSBoZWlnaHQpIDogbV9ib3VuZHMoeCwgeSwgd2lkdGgsIGhlaWdodCksIG1faGFzQm91
bmRzKHRydWUpIHsgfQorICAgIGV4cGxpY2l0IENDTWF5YmVSZWN0KGNvbnN0IFJlY3RUeXBlJiBy
ZWN0KSA6IG1fYm91bmRzKHJlY3QpLCBtX2hhc0JvdW5kcyh0cnVlKSB7IH0KKworICAgIHN0YXRp
YyBDQ01heWJlUmVjdDxQcmltYXRpdmVUeXBlLCBSZWN0VHlwZT4gbm9uZSgpIHsgcmV0dXJuIEND
TWF5YmVSZWN0KCk7IH0KKworICAgIGJvb2wgaGFzQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNCb3VuZHM7IH0KKworICAgIGNvbnN0IFJlY3RUeXBlJiBib3VuZHMoKSBjb25zdCB7IEFTU0VS
VChtX2hhc0JvdW5kcyk7IHJldHVybiBtX2JvdW5kczsgfQorCisgICAgY29uc3QgUmVjdFR5cGUm
IGludGVyc2VjdChjb25zdCBSZWN0VHlwZSYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fYm91bmRz
ID0gIW1faGFzQm91bmRzID8gcmVjdCA6IGludGVyc2VjdGlvbihtX2JvdW5kcywgcmVjdCk7Cisg
ICAgICAgIG1faGFzQm91bmRzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fYm91bmRzOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBSZWN0VHlwZSBtX2JvdW5kczsKKyAgICBib29sIG1faGFzQm91
bmRzOworfTsKKwordHlwZWRlZiBDQ01heWJlUmVjdDxpbnQsIEludFJlY3Q+IENDSW50TWF5YmVS
ZWN0OwordHlwZWRlZiBDQ01heWJlUmVjdDxmbG9hdCwgRmxvYXRSZWN0PiBDQ0Zsb2F0TWF5YmVS
ZWN0OworCitpbmxpbmUgRmxvYXRSZWN0IGludGVyc2VjdGlvbihjb25zdCBDQ0Zsb2F0TWF5YmVS
ZWN0JiBzLCBjb25zdCBGbG9hdFJlY3QmIGYpIHsgcmV0dXJuICFzLmhhc0JvdW5kcygpID8gZiA6
IGludGVyc2VjdGlvbihzLmJvdW5kcygpLCBmKTsgfQoraW5saW5lIEZsb2F0UmVjdCBpbnRlcnNl
Y3Rpb24oY29uc3QgRmxvYXRSZWN0JiBmLCBjb25zdCBDQ0Zsb2F0TWF5YmVSZWN0JiBzKSB7IHJl
dHVybiBpbnRlcnNlY3Rpb24ocywgZik7IH0KKworaW5saW5lIEludFJlY3QgaW50ZXJzZWN0aW9u
KGNvbnN0IENDSW50TWF5YmVSZWN0JiBzLCBjb25zdCBJbnRSZWN0JiBpKSB7IHJldHVybiAhcy5o
YXNCb3VuZHMoKSA/IGkgOiBpbnRlcnNlY3Rpb24ocy5ib3VuZHMoKSwgaSk7IH0KK2lubGluZSBJ
bnRSZWN0IGludGVyc2VjdGlvbihjb25zdCBJbnRSZWN0JiBpLCBjb25zdCBDQ0ludE1heWJlUmVj
dCYgcykgeyByZXR1cm4gaW50ZXJzZWN0aW9uKHMsIGkpOyB9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAppbmRl
eCBjNTYxMWFjMjdhNmFlYzRhN2ZiZDY5NDAyM2QzNDNmNTJiYTVkMjNjLi43MzU0ZDNiMTM1MzQy
NTQxODZhMzVhNDIwYzY2NzMxOTYwODk5ZWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9u
VHJhY2tlci5jcHAKQEAgLTE5MSw2ICsxOTEsOCBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheQog
ewogICAgIEFTU0VSVCghbV9zdGFjay5pc0VtcHR5KCkpOwogICAgIEFTU0VSVChsYXllci0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOworICAgIGlmICht
X3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxheWVyLT5kcmF3
T3BhY2l0eSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMiwyMyArMjA0LDI1IEBAIHZv
aWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6
bWFya09jY2x1ZGVkQmVoaW5kTGF5CiAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJn
ZXQudW5pdGUoY29tcHV0ZU9jY2x1c2lvbkJlaGluZExheWVyPExheWVyVHlwZT4obGF5ZXIsIGNv
bnRlbnRUb1RhcmdldFN1cmZhY2UpKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHRlc3RDb250
ZW50UmVjdE9jY2x1ZGVkKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBSZWdpb24mIG9jY2x1
c2lvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRT
cGFjZVRyYW5zZm9ybSwgY29uc3QgQ0NGbG9hdE1heWJlUmVjdCYgc2Npc3NvclJlY3QsIGNvbnN0
IFJlZ2lvbiYgb2NjbHVzaW9uKQogewotICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFF1YWQgPSBj
b250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKLSAg
ICByZXR1cm4gb2NjbHVzaW9uLmNvbnRhaW5zKHRyYW5zZm9ybWVkUXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3JtZWRSZWN0ID0gaW50ZXJzZWN0aW9u
KGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChjb250ZW50UmVjdCkpLCBz
Y2lzc29yUmVjdCk7CisgICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCwgYXMgd2Ugd2Fu
dCB0byBpbmNsdWRlIHBhcnRpYWwgcGl4ZWxzIGluIHRoZSB0ZXN0LgorICAgIHJldHVybiB0cmFu
c2Zvcm1lZFJlY3QuaXNFbXB0eSgpIHx8IG9jY2x1c2lvbi5jb250YWlucyhlbmNsb3NpbmdJbnRS
ZWN0KHRyYW5zZm9ybWVkUmVjdCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpvY2NsdWRlZChjb25zdCBMYXllclR5cGUq
IGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAgICBBU1NFUlQo
IW1fc3RhY2suaXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
ID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOwogCi0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9j
Y2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5
cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pKQorICAgIGlmICh0
ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2VU
cmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllciksIHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSgpLCBt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbikpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvVGFy
Z2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2Nj
bHVzaW9uSW5UYXJnZXQpKQorICAgIGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50
UmVjdCwgY29udGVudFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwg
c2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5U
YXJnZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0y
MjYsMTkgKzIzMCwxOCBAQCBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT46Om9jY2x1ZGVkKGNvbnN0IExheWVyVAogdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIGJvb2wgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3VyZmFjZU9jY2x1
ZGVkKGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50
UmVjdCkgY29uc3QKIHsKLSAgICAvLyBBIHN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IGxheWVy
cyBkcmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBuZWVkIHRvIHVzZSBvY2NsdXNpb24gZnJvbSBv
bmUgc3BvdCBkb3duIG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsK
ICAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUKGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzdXJmYWNlQ29udGVudFRvU2NyZWVuU3BhY2UgPSBjb250ZW50VG9TY3Jl
ZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKKyAgICBJbnRSZWN0IHN1cmZhY2VD
bGlwcGVkQ29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGludGVyc2VjdGlvbihzdXJmYWNl
Q29udGVudFJlY3QsIHNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKCkpKTsKIAotICAgIGNvbnN0
IFN0YWNrT2JqZWN0JiBzZWNvbmRMYXN0ID0gbV9zdGFja1ttX3N0YWNrLnNpemUoKS0yXTsKLSAg
ICBpZiAodGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoc3VyZmFjZUNvbnRlbnRSZWN0LCBzdXJmYWNl
Q29udGVudFRvU2NyZWVuU3BhY2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5TY3JlZW4pKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQSBzdXJmYWNlIGlz
IG5vdCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0
byB1c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2suCisgICAgUmVn
aW9uIG9jY2x1c2lvbjsKKyAgICBpZiAobV9zdGFjay5zaXplKCkgPj0gMikKKyAgICAgICAgb2Nj
bHVzaW9uID0gbV9zdGFja1ttX3N0YWNrLnNpemUoKS0yXS5vY2NsdXNpb25JblNjcmVlbjsKKwor
ICAgIHJldHVybiB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChzdXJmYWNlQ2xpcHBlZENvbnRlbnRS
ZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgc2Np
c3NvclJlY3RJblNjcmVlblNwYWNlKCksIG9jY2x1c2lvbik7CiB9CiAKIC8vIERldGVybWluZXMg
d2hhdCBwb3J0aW9uIG9mIHJlY3QsIGlmIGFueSwgaXMgdW5vY2NsdWRlZCAobm90IG9jY2x1ZGVk
IGJ5IHJlZ2lvbikuIElmCkBAIC0yNTYsMjIgKzI1OSwyMCBAQCBzdGF0aWMgaW5saW5lIEludFJl
Y3QgcmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFJlZ2lvbiYg
cmVnaQogICAgIHJldHVybiBib3VuZHNSZWN0OwogfQogCi1zdGF0aWMgSW50UmVjdCBjb21wdXRl
VW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBSZWdpb24m
IG9jY2x1c2lvbikKK2lubGluZSBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBj
b250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IENDRmxvYXRNYXliZVJlY3QmIHNjaXNzb3JSZWN0
LCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKIHsKLSAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRR
dWFkID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0
KSk7Ci0gICAgaWYgKCF0cmFuc2Zvcm1lZFF1YWQuaXNSZWN0aWxpbmVhcigpKQotICAgICAgICBy
ZXR1cm4gY29udGVudFJlY3Q7Ci0gICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCBhdCBl
YWNoIHN0ZXAgaGVyZSwgYXMgd2Ugd2FudCB0byBjb250YWluIGFueSB1bm9jY2x1ZGVkIHBhcnRp
YWwgcGl4ZWxzIGluIHRoZSByZXN1bHRpbmcgSW50UmVjdC4KLSAgICBJbnRSZWN0IHNocnVua1Jl
Y3QgPSByZWN0U3VidHJhY3RSZWdpb24oZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1lZFF1YWQu
Ym91bmRpbmdCb3goKSksIG9jY2x1c2lvbik7CisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybWVkUmVj
dCA9IGludGVyc2VjdGlvbihjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3Qo
Y29udGVudFJlY3QpKSwgc2Npc3NvclJlY3QpOworICAgIC8vIFRha2UgdGhlIGVuY2xvc2luZ0lu
dFJlY3QgYXQgZWFjaCBzdGVwLCBhcyB3ZSB3YW50IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQg
cGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3VsdGluZyBJbnRSZWN0LgorICAgIEludFJlY3Qgc2hy
dW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVk
UmVjdCksIG9jY2x1c2lvbik7CiAgICAgSW50UmVjdCB1bm9jY2x1ZGVkUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoY29udGVudFNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVj
dChzaHJ1bmtSZWN0KSkpOwotICAgIC8vIFRoZSB1c2Ugb2YgZW5jbG9zaW5nSW50UmVjdCwgd2l0
aCBmbG9hdGluZyBwb2ludCByb3VuZGluZywgY2FuIGdpdmUgdXMgYSByZXN1bHQgdGhhdCBpcyBu
b3QgYSBzdWItcmVjdCBvZiBjb250ZW50UmVjdCwgYnV0IG91cgotICAgIC8vIHJldHVybiB2YWx1
ZSBzaG91bGQgYmUgYSBzdWItcmVjdC4KKyAgICAvLyBUaGUgcmVjdCBiYWNrIGluIGNvbnRlbnQg
c3BhY2UgaXMgYSBib3VuZGluZyBib3ggYW5kIG1heSBleHRlbmQgb3V0c2lkZSBvZiB0aGUgb3Jp
Z2luYWwgY29udGVudFJlY3QsIHNvIGNsYW1wIGl0IHRvIHRoZSBjb250ZW50UmVjdEJvdW5kcy4K
ICAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRSZWN0LCBjb250ZW50UmVjdCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+CiBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJm
YWNlVHlwZT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllclR5cGUqIGxheWVyLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIW1fc3RhY2su
aXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBj
b250ZW50UmVjdDsKIApAQCAtMjgxLDggKzI4MiwxMCBAQCBJbnRSZWN0IENDT2NjbHVzaW9uVHJh
Y2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2NjbHVkZWRDb250ZW50
UgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVu
dFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRlbnRUb1RhcmdldFN1cmZh
Y2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAKLSAgICBJbnRSZWN0IHVub2NjbHVkZWRJ
blNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRl
bnRUb1NjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7Ci0gICAg
SW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0
KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblRhcmdldCk7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5TY3JlZW4gPSBjb21wdXRl
VW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZSwg
c2Npc3NvclJlY3RJblNjcmVlblNwYWNlKCksIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2Ny
ZWVuKTsKKyAgICBpZiAodW5vY2NsdWRlZEluU2NyZWVuLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblRhcmdldCA9IGNvbXB1dGVV
bm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2Us
IHNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKCksIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbklu
VGFyZ2V0KTsKIAogICAgIHJldHVybiBpbnRlcnNlY3Rpb24odW5vY2NsdWRlZEluU2NyZWVuLCB1
bm9jY2x1ZGVkSW5UYXJnZXQpOwogfQpAQCAtMjkwLDI1ICsyOTMsMzUgQEAgSW50UmVjdCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1
ZGVkQ29udGVudFIKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGU+CiBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5
ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdAog
ewotICAgIC8vIEEgc3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgbGF5ZXJzIGRyYXdpbmcgaW50
byBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gdXNlIG9jY2x1c2lvbiBmcm9tIG9uZSBzcG90IGRvd24g
b24gdGhlIHN0YWNrLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVy
biBzdXJmYWNlQ29udGVudFJlY3Q7Ci0KKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsK
ICAgICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUKGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKLSAgICAvLyBXZSB3
YW50IHRvIHJldHVybiBhIHJlY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIHZpc2libGUgcGFydHMg
b2YgfGNvbnRlbnRSZWN0fCBpbiBib3RoIHNjcmVlbiBzcGFjZSBhbmQgaW4gdGhlIHRhcmdldCBz
dXJmYWNlLgotICAgIC8vIFNvIHdlIGZpbmQgdGhlIHZpc2libGUgcGFydHMgb2YgfGNvbnRlbnRS
ZWN0fCBpbiBlYWNoIHNwYWNlLCBhbmQgdGFrZSB0aGUgaW50ZXJzZWN0aW9uLgorICAgIEludFJl
Y3Qgc3VyZmFjZUNsaXBwZWRDb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoaW50ZXJzZWN0
aW9uKHN1cmZhY2VDb250ZW50UmVjdCwgc2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoKSkpOwog
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvU2NyZWVuU3BhY2UgPSBjb250ZW50
VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKKyAgICAvLyBBIHN1cmZh
Y2UgaXMgbm90IG9jY2x1ZGVkIGJ5IGxheWVycyBkcmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBu
ZWVkIHRvIHVzZSBvY2NsdXNpb24gZnJvbSBvbmUgc3BvdCBkb3duIG9uIHRoZSBzdGFjay4KKyAg
ICBSZWdpb24gb2NjbHVzaW9uOworICAgIGlmIChtX3N0YWNrLnNpemUoKSA+PSAyKQorICAgICAg
ICBvY2NsdXNpb24gPSBtX3N0YWNrW21fc3RhY2suc2l6ZSgpLTJdLm9jY2x1c2lvbkluU2NyZWVu
OwogCi0gICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3RhY2su
c2l6ZSgpLTJdOwotICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29tcHV0ZVVub2Nj
bHVkZWRDb250ZW50UmVjdChzdXJmYWNlQ29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNl
LCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJ
blNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3Qoc3VyZmFjZUNsaXBwZWRDb250
ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllciks
IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSgpLCBvY2NsdXNpb24pOwogCiAgICAgcmV0dXJuIHVu
b2NjbHVkZWRJblNjcmVlbjsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDRmxvYXRNYXliZVJlY3QgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c2Npc3NvclJlY3RJblRhcmdl
dFN1cmZhY2UoKSBjb25zdAoreworICAgIHJldHVybiBDQ0Zsb2F0TWF5YmVSZWN0KG1fc3RhY2su
bGFzdCgpLnN1cmZhY2UtPnNjaXNzb3JSZWN0KG1fdXNlU3VyZmFjZURhbWFnZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgor
Q0NGbG9hdE1heWJlUmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVy
U3VyZmFjZVR5cGU+OjpzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIGNvbnN0IFJlZ2lvbiYgQ0NP
Y2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6Y3VycmVu
dE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdAogewogICAgIEFTU0VSVCghbV9zdGFjay5p
c0VtcHR5KCkpOwpAQCAtMzM0LDYgKzM0Nyw4IEBAIHRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1CiB0
ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVu
ZGVyU3VyZmFjZUNocm9taXVtPjo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBM
YXllckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdDsK
IHRlbXBsYXRlIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFj
ZSgpIGNvbnN0OwogdGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OmN1cnJlbnRPY2NsdXNpb25J
blRhcmdldFN1cmZhY2UoKSBjb25zdDsKK3RlbXBsYXRlIENDRmxvYXRNYXliZVJlY3QgQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojpz
Y2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0OwordGVtcGxhdGUgQ0NGbG9hdE1heWJl
UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT46OnNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogCiB0ZW1wbGF0ZSB2
b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46
OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1Rhcmdl
dCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIEND
UmVuZGVyU3VyZmFjZT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVy
SW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0IENDUmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQp
OwpAQCAtMzQ1LDYgKzM2MCw4IEBAIHRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2Vy
QmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6dW5vY2NsdWRlCiB0ZW1wbGF0ZSBJ
bnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBjb25z
dCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgY29uc3QgUmVn
aW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+
OjpjdXJyZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogdGVtcGxhdGUgY29uc3Qg
UmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZh
Y2U+OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0ZW1wbGF0ZSBD
Q0Zsb2F0TWF5YmVSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVu
ZGVyU3VyZmFjZT46OnNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0ZW1wbGF0
ZSBDQ0Zsb2F0TWF5YmVSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIEND
UmVuZGVyU3VyZmFjZT46OnNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKaW5k
ZXggZDFjODMzZTFhOWJhNGVlZGU5YWJkZjQzMDIxZTdlZDdiNGM0ZmYxNi4uZWJlZWRjYjFjNjZj
ZWMyYjAxN2JhYzk5ZjUyMjkwZGE1MWUyM2YxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25U
cmFja2VyLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNs
dWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1
ZGUgImNjL0NDTWF5YmVSZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDTGF5
ZXJJbXBsOwpAQCAtNDMsOCArNDQsMTMgQEAgY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOwog
Ly8gRmluYWxseSwgb25jZSBmaW5pc2hlZCB3aXRoIHRoZSBsYXllciwgb2NjbHVzaW9uIGJlaGlu
ZCB0aGUgbGF5ZXIgc2hvdWxkIGJlIG1hcmtlZCBieSBjYWxsaW5nIG1hcmtPY2NsdWRlZEJlaGlu
ZExheWVyKCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgogY2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NPY2NsdXNpb25UcmFja2VyQmFzZSk7CiBwdWJsaWM6Ci0gICAgQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZSgpIHsgfQorICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2UoKSA6IG1f
dXNlU3VyZmFjZURhbWFnZShmYWxzZSkgeyB9CisgICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZShi
b29sIHVzZVN1cmZhY2VEYW1hZ2UsIEZsb2F0UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2Up
CisgICAgICAgIDogbV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2Uoc2Npc3NvclJlY3RJblNjcmVl
blNwYWNlKQorICAgICAgICAsIG1fdXNlU3VyZmFjZURhbWFnZSh1c2VTdXJmYWNlRGFtYWdlKQor
ICAgIHsgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBsYXllciByZXByZXNlbnRp
bmcgaXRzZWxmLiBJZiB0aGUgdGFyZ2V0IHdhcyBub3QgYWxyZWFkeSBjdXJyZW50LCB0aGVuIHRo
aXMgaW5kaWNhdGVzIHdlIGhhdmUgZW50ZXJlZCBhIG5ldyBzdXJmYWNlIHN1YnRyZWUuCiAgICAg
dm9pZCBlbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIG5l
d1RhcmdldCk7CkBAIC05MCw4ICs5NiwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gV2UgbWVyZ2Ug
dGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBuZXcgY3VycmVu
dCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGlmIG5v
dCBhbHJlYWR5IHRoZXJlLgogICAgIFZlY3RvcjxTdGFja09iamVjdCwgMT4gbV9zdGFjazsKIAor
ICAgIC8vIEFsbG93IHRlc3RzIHRvIG92ZXJyaWRlIHRoZXNlLgorICAgIHZpcnR1YWwgQ0NGbG9h
dE1heWJlUmVjdCBzY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgQ0NGbG9hdE1heWJlUmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UoKSBjb25zdDsKKwog
cHJpdmF0ZToKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09jY2x1c2lvblRyYWNrZXJCYXNl
KTsKKyAgICBib29sIG1fdXNlU3VyZmFjZURhbWFnZTsKKyAgICBDQ0Zsb2F0TWF5YmVSZWN0IG1f
c2Npc3NvclJlY3RJblNjcmVlblNwYWNlOwogfTsKIAogdHlwZWRlZiBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gQ0NPY2NsdXNpb25U
cmFja2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggMTY5OTk5ODA4ZThl
NDBhOWFlNGI3MTMwYTkzM2IzYTllMGRjODMwYy4uZmIyNmVmMjgxOGJmZTcyYjg0MzQ5NDgwMTIw
Y2JiZGFlNDc3M2Y0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0zMTAs
NSArMzEwLDE4IEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpzdXJmYWNlUHJvcGVydHlDaGFuZ2Vk
T25seUZyb21EZXNjZW5kYW50KCkgY29uc3QKICAgICByZXR1cm4gbV9zdXJmYWNlUHJvcGVydHlD
aGFuZ2VkICYmICFtX293bmluZ0xheWVyLT5sYXllclByb3BlcnR5Q2hhbmdlZCgpOwogfQogCitG
bG9hdFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpzY2lzc29yUmVjdChib29sIHVzZURhbWFnZSkgY29u
c3QKK3sKKyAgICBGbG9hdFJlY3Qgc2Npc3NvciA9IGNvbnRlbnRSZWN0KCk7CisgICAgaWYgKG1f
b3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5
ZXJDbGlwcGluZygpICYmIHVzZURhbWFnZSkgeworICAgICAgICBzY2lzc29yLmludGVyc2VjdCht
X2NsaXBSZWN0KTsKKyAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3QobV9kYW1hZ2VUcmFja2VyLT5j
dXJyZW50RGFtYWdlUmVjdCgpKTsKKyAgICB9IGVsc2UgaWYgKHVzZURhbWFnZSkKKyAgICAgICAg
c2Npc3Nvci5pbnRlcnNlY3QobV9kYW1hZ2VUcmFja2VyLT5jdXJyZW50RGFtYWdlUmVjdCgpKTsK
KyAgICBlbHNlIGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5w
YXJlbnQoKS0+dXNlc0xheWVyQ2xpcHBpbmcoKSkKKyAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3Qo
bV9jbGlwUmVjdCk7CisgICAgcmV0dXJuIHNjaXNzb3I7Cit9CisKIH0KICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4
IGU1ZTY4M2E1MjM2ZWFkNTk1NWE4YjM3ZGYxODdkZTFlZWZmODY3ZDAuLmM2OWI0MDRlYzc0MDdm
Mjk3ZDE1NGY4Mjk2ZjhkNTlmMWUwYWM4OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
CkBAIC0xMTMsNiArMTEzLDcgQEAgcHVibGljOgogICAgIGJvb2wgc3VyZmFjZVByb3BlcnR5Q2hh
bmdlZE9ubHlGcm9tRGVzY2VuZGFudCgpIGNvbnN0OwogCiAgICAgQ0NEYW1hZ2VUcmFja2VyKiBk
YW1hZ2VUcmFja2VyKCkgY29uc3QgeyByZXR1cm4gbV9kYW1hZ2VUcmFja2VyLmdldCgpOyB9Cisg
ICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KGJvb2wgdXNlRGFtYWdlKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICB2b2lkIGRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1w
bCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgU2tCaXRtYXAmIGZpbHRlckJp
dG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlOTFlMzM2ZGJkYjNlY2Jk
Yzk0YTk0YWEwYjAyNDU5Yzc0OThkNDliLi5hZTY1ZmE1NTA0ZjQwY2JlNTY2ZTVkMzczNjFlODdk
NjdlNDhkNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTc5LDYgKzc5LDcg
QEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0xheWVyVHJlZVRlc3RDb21tb24uaCcsCisgICAgICAgICAgICAndGVzdHMvQ0NNYXli
ZVJlY3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTWF5YmVSZWN0VGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTWF5YmVSZWN0VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY3MzU3
OTg3NzM1MjE1NTY4MWVjMWM3MzE2N2IzNzE3ZDI2ZDY3YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NNYXliZVJlY3RUZXN0LmNwcApAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
Y2MvQ0NNYXliZVJlY3QuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNkZWZpbmUgRVhQ
RUNUX0VRX1JFQ1QoYSwgYikgXAorICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCisgICAg
RVhQRUNUX0VRKGEueSgpLCBiLnkoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS53aWR0aCgpLCBiLndp
ZHRoKCkpOyBcCisgICAgRVhQRUNUX0VRKGEuaGVpZ2h0KCksIGIuaGVpZ2h0KCkpOworCituYW1l
c3BhY2UgeworCitURVNUKENDTWF5YmVSZWN0VGVzdCwgY29uc3RydWN0b3JzKQoreworICAgIEND
RmxvYXRNYXliZVJlY3QgZmxvYXROb25lOworICAgIEVYUEVDVF9GQUxTRShmbG9hdE5vbmUuaGFz
Qm91bmRzKCkpOworCisgICAgQ0NJbnRNYXliZVJlY3QgaW50Tm9uZTsKKyAgICBFWFBFQ1RfRkFM
U0UoaW50Tm9uZS5oYXNCb3VuZHMoKSk7CisKKyAgICBDQ0Zsb2F0TWF5YmVSZWN0IGZsb2F0U2l6
ZWQoMTAuNiwgMTAuNiwgMzAuMSwgMzAuMSk7CisgICAgRVhQRUNUX1RSVUUoZmxvYXRTaXplZC5o
YXNCb3VuZHMoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoRmxvYXRSZWN0KDEwLjYsIDEwLjYsIDMw
LjEsIDMwLjEpLCBmbG9hdFNpemVkLmJvdW5kcygpKTsKKworICAgIENDSW50TWF5YmVSZWN0IGlu
dFNpemVkKDEwLCAxMCwgMzAsIDMwKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRTaXplZC5oYXNCb3Vu
ZHMoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoRmxvYXRSZWN0KDEwLCAxMCwgMzAsIDMwKSwgaW50
U2l6ZWQuYm91bmRzKCkpOworCisgICAgRmxvYXRSZWN0IGZsb2F0UmVjdCgxMC42LCAxMC42LCAz
MC4xLCAzMC4xKTsKKyAgICBDQ0Zsb2F0TWF5YmVSZWN0IGZsb2F0RnJvbVJlY3QoZmxvYXRSZWN0
KTsKKyAgICBFWFBFQ1RfVFJVRShmbG9hdEZyb21SZWN0Lmhhc0JvdW5kcygpKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChmbG9hdFJlY3QsIGZsb2F0RnJvbVJlY3QuYm91bmRzKCkpOworCisgICAgSW50
UmVjdCBpbnRSZWN0KDEwLjYsIDEwLjYsIDMwLjEsIDMwLjEpOworICAgIENDSW50TWF5YmVSZWN0
IGludEZyb21SZWN0KGludFJlY3QpOworICAgIEVYUEVDVF9UUlVFKGludEZyb21SZWN0Lmhhc0Jv
dW5kcygpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChpbnRSZWN0LCBpbnRGcm9tUmVjdC5ib3VuZHMo
KSk7Cit9CisKK1RFU1QoQ0NNYXliZVJlY3RUZXN0LCBpbnRlcnNlY3QpCit7CisgICAgRmxvYXRS
ZWN0IGZsb2F0UmVjdCgxMCwgMTAsIDMwLCAzMCk7CisgICAgQ0NGbG9hdE1heWJlUmVjdCBmbG9h
dE1heWJlOworICAgIGZsb2F0TWF5YmUuaW50ZXJzZWN0KGZsb2F0UmVjdCk7CisgICAgRVhQRUNU
X1RSVUUoZmxvYXRNYXliZS5oYXNCb3VuZHMoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoZmxvYXRS
ZWN0LCBmbG9hdE1heWJlLmJvdW5kcygpKTsKKworICAgIEludFJlY3QgaW50UmVjdCgxMCwgMTAs
IDMwLCAzMCk7CisgICAgQ0NJbnRNYXliZVJlY3QgaW50TWF5YmU7CisgICAgaW50TWF5YmUuaW50
ZXJzZWN0KGludFJlY3QpOworICAgIEVYUEVDVF9UUlVFKGludE1heWJlLmhhc0JvdW5kcygpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChpbnRSZWN0LCBpbnRNYXliZS5ib3VuZHMoKSk7Cit9CisKK1RF
U1QoQ0NNYXliZVJlY3RUZXN0LCBpbnRlcnNlY3Rpb24pCit7CisgICAgRmxvYXRSZWN0IGZsb2F0
UmVjdCgxMCwgMTAsIDMwLCAzMCk7CisKKyAgICBDQ0Zsb2F0TWF5YmVSZWN0IGZsb2F0TWF5YmVO
b25lOworICAgIENDRmxvYXRNYXliZVJlY3QgZmxvYXRNYXliZUluc2lkZSgxNSwgMTUsIDEwLCAx
MCk7CisgICAgQ0NGbG9hdE1heWJlUmVjdCBmbG9hdE1heWJlT3V0c2lkZSg1MCwgNTAsIDEwLCAx
MCk7CisgICAgQ0NGbG9hdE1heWJlUmVjdCBmbG9hdE1heWJlQ3Jvc3NlcygxNSwgMCwgMTAsIDgw
KTsKKworICAgIEVYUEVDVF9FUV9SRUNUKGZsb2F0UmVjdCwgaW50ZXJzZWN0aW9uKGZsb2F0UmVj
dCwgZmxvYXRNYXliZU5vbmUpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChmbG9hdE1heWJlSW5zaWRl
LmJvdW5kcygpLCBpbnRlcnNlY3Rpb24oZmxvYXRSZWN0LCBmbG9hdE1heWJlSW5zaWRlKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoRmxvYXRSZWN0KCksIGludGVyc2VjdGlvbihmbG9hdFJlY3QsIGZs
b2F0TWF5YmVPdXRzaWRlKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoRmxvYXRSZWN0KDE1LCAxMCwg
MTAsIDMwKSwgaW50ZXJzZWN0aW9uKGZsb2F0UmVjdCwgZmxvYXRNYXliZUNyb3NzZXMpKTsKKwor
ICAgIEludFJlY3QgaW50UmVjdCgxMCwgMTAsIDMwLCAzMCk7CisKKyAgICBDQ0ludE1heWJlUmVj
dCBpbnRNYXliZU5vbmU7CisgICAgQ0NJbnRNYXliZVJlY3QgaW50TWF5YmVJbnNpZGUoMTUsIDE1
LCAxMCwgMTApOworICAgIENDSW50TWF5YmVSZWN0IGludE1heWJlT3V0c2lkZSg1MCwgNTAsIDEw
LCAxMCk7CisgICAgQ0NJbnRNYXliZVJlY3QgaW50TWF5YmVDcm9zc2VzKDE1LCAwLCAxMCwgODAp
OworCisgICAgRVhQRUNUX0VRX1JFQ1QoaW50UmVjdCwgaW50ZXJzZWN0aW9uKGludFJlY3QsIGlu
dE1heWJlTm9uZSkpOworICAgIEVYUEVDVF9FUV9SRUNUKGludE1heWJlSW5zaWRlLmJvdW5kcygp
LCBpbnRlcnNlY3Rpb24oaW50UmVjdCwgaW50TWF5YmVJbnNpZGUpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KCksIGludGVyc2VjdGlvbihpbnRSZWN0LCBpbnRNYXliZU91dHNpZGUpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDE1LCAxMCwgMTAsIDMwKSwgaW50ZXJzZWN0aW9u
KGludFJlY3QsIGludE1heWJlQ3Jvc3NlcykpOworfQorCisKK30gLy8gbmFtZXNwYWNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LmNwcAppbmRleCA2NzhlYzk2NDUyYjBiYWVkNjg3YWVmNjY2NjJkZjNkOGQ1MTA1ZGE4Li44
NWQ1MmRiNDA2ZTNiOTBlNzI3NGU3MWU4MWE5MDhkZTk4NWYyNTg0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAK
QEAgLTY4LDExICs2OCwzMiBAQCBwdWJsaWM6CiAvLyBBIHN1YmNsYXNzIHRvIGV4cG9zZSB0aGUg
dG90YWwgY3VycmVudCBvY2NsdXNpb24uCiBjbGFzcyBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIDog
cHVibGljIENDT2NjbHVzaW9uVHJhY2tlciB7CiBwdWJsaWM6CisgICAgVGVzdENDT2NjbHVzaW9u
VHJhY2tlcigpIDogbV9vdmVycmlkZVN1cmZhY2VTY2lzc29yUmVjdChmYWxzZSksIG1fb3ZlcnJp
ZGVTY3JlZW5TY2lzc29yUmVjdChmYWxzZSkgeyB9CisKICAgICBSZWdpb24gb2NjbHVzaW9uSW5T
Y3JlZW5TcGFjZSgpIGNvbnN0IHsgcmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5s
YXN0KCkub2NjbHVzaW9uSW5TY3JlZW47IH0KICAgICBSZWdpb24gb2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKCkgY29uc3QgeyByZXR1cm4gQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3Qo
KS5vY2NsdXNpb25JblRhcmdldDsgfQogCiAgICAgdm9pZCBzZXRPY2NsdXNpb25JblNjcmVlblNw
YWNlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKSB7IENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5s
YXN0KCkub2NjbHVzaW9uSW5TY3JlZW4gPSByZWdpb247IH0KICAgICB2b2lkIHNldE9jY2x1c2lv
bkluVGFyZ2V0U3VyZmFjZShjb25zdCBSZWdpb24mIHJlZ2lvbikgeyBDQ09jY2x1c2lvblRyYWNr
ZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gcmVnaW9uOyB9CisKKyAgICB2
b2lkIHNldFN1cmZhY2VTY2lzc29yUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9vdmVy
cmlkZVN1cmZhY2VTY2lzc29yUmVjdCA9IHRydWU7IG1fc3VyZmFjZVNjaXNzb3JSZWN0ID0gQ0NG
bG9hdE1heWJlUmVjdChyZWN0KTt9CisgICAgdm9pZCBzZXRTY3JlZW5TY2lzc29yUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9vdmVycmlkZVNjcmVlblNjaXNzb3JSZWN0ID0gdHJ1ZTsg
bV9zY3JlZW5TY2lzc29yUmVjdCA9IENDRmxvYXRNYXliZVJlY3QocmVjdCk7fQorCisgICAgdm9p
ZCBza2lwU3VyZmFjZVNjaXNzb3JSZWN0KCkgeyBtX292ZXJyaWRlU3VyZmFjZVNjaXNzb3JSZWN0
ID0gdHJ1ZTsgbV9zdXJmYWNlU2Npc3NvclJlY3QgPSBDQ0Zsb2F0TWF5YmVSZWN0Ojpub25lKCk7
fQorICAgIHZvaWQgc2tpcFNjcmVlblNjaXNzb3JSZWN0KCkgeyBtX292ZXJyaWRlU2NyZWVuU2Np
c3NvclJlY3QgPSB0cnVlOyBtX3NjcmVlblNjaXNzb3JSZWN0ID0gQ0NGbG9hdE1heWJlUmVjdDo6
bm9uZSgpO30KKworICAgIHZvaWQgcmVzZXRTdXJmYWNlU2Npc3NvclJlY3QoKSB7IG1fb3ZlcnJp
ZGVTdXJmYWNlU2Npc3NvclJlY3QgPSBmYWxzZTsgfQorICAgIHZvaWQgcmVzZXRTY3JlZW5TY2lz
c29yUmVjdCgpIHsgbV9vdmVycmlkZVNjcmVlblNjaXNzb3JSZWN0ID0gZmFsc2U7IH0KKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgQ0NGbG9hdE1heWJlUmVjdCBzY2lzc29yUmVjdEluVGFyZ2V0
U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVTdXJmYWNlU2Npc3NvclJlY3QgPyBt
X3N1cmZhY2VTY2lzc29yUmVjdCA6IENDT2NjbHVzaW9uVHJhY2tlcjo6c2Npc3NvclJlY3RJblRh
cmdldFN1cmZhY2UoKTsgfQorICAgIHZpcnR1YWwgQ0NGbG9hdE1heWJlUmVjdCBzY2lzc29yUmVj
dEluU2NyZWVuU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlU2NyZWVuU2Npc3NvclJl
Y3QgPyBtX3NjcmVlblNjaXNzb3JSZWN0IDogQ0NPY2NsdXNpb25UcmFja2VyOjpzY2lzc29yUmVj
dEluU2NyZWVuU3BhY2UoKTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9vdmVycmlkZVN1cmZh
Y2VTY2lzc29yUmVjdDsKKyAgICBib29sIG1fb3ZlcnJpZGVTY3JlZW5TY2lzc29yUmVjdDsKKyAg
ICBDQ0Zsb2F0TWF5YmVSZWN0IG1fc3VyZmFjZVNjaXNzb3JSZWN0OworICAgIENDRmxvYXRNYXli
ZVJlY3QgbV9zY3JlZW5TY2lzc29yUmVjdDsKIH07CiAKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCkBAIC05OCw2ICsxMTksOCBAQCBURVNU
KENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQogCiAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOwogCisgICAgb2NjbHVzaW9uLnNraXBTdXJmYWNlU2Npc3NvclJlY3QoKTsK
KwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJT
dXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5n
ZXQoKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9jY2x1
c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwpAQCAtMTUwLDYgKzE3Myw4
IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdp
b25XaXRoUm90YXRpb24pCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBvY2NsdXNpb24uc2tpcFN1
cmZhY2VTY2lzc29yUmVjdCgpOworCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRl
ZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMw
LCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMo
KSk7CkBAIC0yMDAsNiArMjI1LDggQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXll
ckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKIAogICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5n
ZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsK
IAorICAgIG9jY2x1c2lvbi5za2lwU3VyZmFjZVNjaXNzb3JSZWN0KCk7CisKICAgICBvY2NsdXNp
b24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKICAg
ICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOwogICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCA1MCwgNTApLCBvY2NsdXNpb24ub2NjbHVzaW9u
SW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKQEAgLTI1Nyw2ICsyODQsOCBAQCBURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRT
dXJmYWNlKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgb2NjbHVzaW9uLnNraXBTdXJmYWNlU2Np
c3NvclJlY3QoKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hp
bGQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGxheWVyLmdldCgpKTsKIApAQCAtMzUwLDYgKzM3OSw4IEBAIFRFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVhZHlP
blN0YWNrCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBvY2NsdXNpb24uc2tpcFN1cmZhY2VTY2lz
c29yUmVjdCgpOworCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGNoaWxkMi5nZXQoKSk7CiAKQEAgLTUwMSw2ICs1MzIsOCBAQCBURVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRPZmZBeGlz
U3VyZmFjZQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgb2NjbHVzaW9uLnNraXBTdXJmYWNlU2Np
c3NvclJlY3QoKTsKKwogICAgIEludFJlY3QgY2xpcHBlZExheWVySW5DaGlsZCA9IGxheWVyVHJh
bnNmb3JtLm1hcFJlY3QobGF5ZXItPnZpc2libGVMYXllclJlY3QoKSk7CiAKICAgICBvY2NsdXNp
b24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAt
NTg1LDYgKzYxOCw4IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRv
T2NjbHVkZWRSZWdpb25XaXRoTXVsdGlwbGVPcGFxdWVMYXllcnMpCiAKICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
CiAKKyAgICBvY2NsdXNpb24uc2tpcFN1cmZhY2VTY2lzc29yUmVjdCgpOworCiAgICAgb2NjbHVz
aW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKICAg
ICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIyLmdldCgpKTsKICAgICBv
Y2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIxLmdldCgpKTsKQEAgLTY5OCw2
ICs3MzMsOCBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25X
aXRoT3ZlcmxhcHBpbmdTaWJsaW5nU3VyZmFjZXMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBv
Y2NsdXNpb24uc2tpcFN1cmZhY2VTY2lzc29yUmVjdCgpOworCiAgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVz
aW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyMi5nZXQoKSk7CiAKQEAgLTgzMSw2ICs4
NjgsOCBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNj
cmVlblNwYWNlKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgb2NjbHVzaW9uLnNraXBTdXJmYWNl
U2Npc3NvclJlY3QoKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2Uo
Y2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhp
bmRMYXllcihsYXllcjIuZ2V0KCkpOwogCkBAIC05NzUsNiArMTAxNCw4IEBAIFRFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2VEaWZmZXJlbnRU
cmFuc2Zvcm1zKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgb2NjbHVzaW9uLnNraXBTdXJmYWNl
U2Npc3NvclJlY3QoKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2Uo
Y2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhp
bmRMYXllcihsYXllcjIuZ2V0KCkpOwogCkBAIC0xMTIxLDYgKzExNjIsOCBAQCBURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIG9jY2x1c2lvbkludGVyYWN0aW9uV2l0aEZpbHRlcnMpCiAKICAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CiAKKyAgICBvY2NsdXNpb24uc2tpcFN1cmZhY2VTY2lzc29yUmVjdCgpOwor
CiAgICAgLy8gT3BhY2l0eSBsYXllciB3b24ndCBjb250cmlidXRlIHRvIG9jY2x1c2lvbi4KICAg
ICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKG9wYWNpdHlMYXllci0+cmVuZGVy
U3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIob3BhY2l0
eUxheWVyLmdldCgpKTsKQEAgLTExNzAsNCArMTIxMyw1MzEgQEAgVEVTVChDQ09jY2x1c2lvblRy
YWNrZXJUZXN0LCBvY2NsdXNpb25JbnRlcmFjdGlvbldpdGhGaWx0ZXJzKQogICAgIEVYUEVDVF9F
USgxdSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgp
KTsKIH0KIAorI2RlZmluZSBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShyZWN0LCBsYXll
ciwgc3VyZmFjZWxheWVyKSBcCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxh
eWVyLCByZWN0KSk7IFwKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVk
KHN1cmZhY2VsYXllciwgcmVjdCkpOworCisjZGVmaW5lIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZ
RVJfU1VSRkFDRShyZWN0LCBsYXllciwgc3VyZmFjZWxheWVyKSBcCisgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChsYXllciwgcmVjdCkpOyBcCisgICAgRVhQRUNUX0ZBTFNFKG9j
Y2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoc3VyZmFjZWxheWVyLCByZWN0KSk7CisKK1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZVNjaXNzb3JSZWN0T3ZlclRpbGUpCit7CisgICAg
VGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0
ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJl
bnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0
ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwg
MzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwor
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsK
KworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5zZXRTdXJmYWNlU2Npc3NvclJlY3Qo
RmxvYXRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFy
Z2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9P
Q0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQo
KSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJl
Y3QoMTAwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQ
RUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgbGF5
ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFD
RShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAs
IDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5t
YXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZl
VG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2Ns
dXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQ
RUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFy
ZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQo
KSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNF
KEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXll
ci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMCwgMTAw
LCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVD
VF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVu
dExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xB
WUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQo
KSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNF
KEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExh
eWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIw
MCwgMTAwLCAxMDAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworfQorCitU
RVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNzb3JSZWN0T3ZlclRpbGUpCit7
CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJl
bnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAg
ICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAg
ICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVy
cyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5
ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBk
dW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5zZXRTY3JlZW5TY2lzc29y
UmVjdChGbG9hdFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVy
LmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAg
ICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDAp
LCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdl
dCgpKTsKKworICAgIC8vIE9jY2x1ZGVkIHNpbmNlIGl0cyBvdXRzaWRlIHRoZSBzdXJmYWNlIGJv
dW5kcy4KKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAw
LCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisKKyAgICAvLyBUZXN0IHdp
dGhvdXQgYSBzdXJmYWNlIHNjaXNzb3IuCisgICAgb2NjbHVzaW9uLnNraXBTdXJmYWNlU2Npc3Nv
clJlY3QoKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgy
MDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1
c2lvbi5yZXNldFN1cmZhY2VTY2lzc29yUmVjdCgpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2Ns
dWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1Rhcmdl
dFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5l
bnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisK
KyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAw
KSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0ND
TFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXll
ci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJl
bnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDEw
MCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAg
IEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCks
IHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xV
REVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIu
Z2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJl
bnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgyMDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0
KCkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAs
IDEwMCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgy
MDAsIDEwMCwgMTAwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9CisKK1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZVNjaXNzb3JSZWN0T3ZlckN1bGxlZFRpbGUpCit7
CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJl
bnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAg
ICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAg
ICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVy
cyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5
ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBk
dW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5zZXRTdXJmYWNlU2Npc3Nv
clJlY3QoRmxvYXRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpOworCisgICAgb2NjbHVzaW9uLmVu
dGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVY
UEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXll
ci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNF
KEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7Cisg
ICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAw
KSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xB
WUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5
ZXIuZ2V0KCkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
LmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCks
IHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJ
bnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAw
LCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDAp
LCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5
ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJf
U1VSRkFDRShJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFy
ZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJl
Y3QoMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwg
MTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwg
cGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5s
ZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9
CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc2NyZWVuU2Npc3NvclJlY3RPdmVyQ3Vs
bGVkVGlsZSkKK3sKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKKyAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIp
OworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBm
aWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlT
Q0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVy
LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7
CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7
CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgb2NjbHVzaW9uLnNldFNj
cmVlblNjaXNzb3JSZWN0KEZsb2F0UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKTsKKworICAgIG9j
Y2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7
CisKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZ
RVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAw
LCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9P
Q0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIu
Z2V0KCksIGxheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJm
YWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRS
ZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNU
X09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIHBhcmVudExh
eWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVS
X1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBh
cmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRS
ZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0
KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAs
IDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBF
WFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCks
IHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xV
REVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIu
Z2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50
TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MTAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAx
MDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBv
Y2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKS5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwg
MzAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VTY2lzc29y
UmVjdE92ZXJQYXJ0aWFsVGlsZXMpCit7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2Ns
dXNpb247CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50
TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsK
KyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxk
KHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRl
ck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJz
KTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAs
IDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAg
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9j
Y2x1c2lvbi5zZXRTdXJmYWNlU2Npc3NvclJlY3QoRmxvYXRSZWN0KDUwLCA1MCwgMjAwLCAyMDAp
KTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRl
clN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50
UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQ
RUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCks
IGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5n
ZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAw
LCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKworICAgIG9jY2x1
c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9u
LmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJT
dXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7Cisg
ICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAw
KSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0ND
TFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXll
ci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBh
cmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5
ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0
KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDIwMCwg
MTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEw
MCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05P
VF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwgcGFy
ZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2
ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgNTAsIDUwLCA1MCksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDUwLCAxMDApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAxMDAs
IDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDUwLCAx
MDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAs
IDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoNTAsIDUwLCAyMDAsIDIwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCA1MCksIG9jY2x1c2lvbi5zdXJmYWNl
VW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEw
MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCAxMDAsIDIwMCwgMTAwKSwgb2Nj
bHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDAsIDEwMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEw
MCwgNTAsIDEwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7
Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc2NyZWVuU2Npc3NvclJlY3RPdmVy
UGFydGlhbFRpbGVzKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFy
ZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRM
YXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRp
b25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAg
bGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0
cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBvY2NsdXNpb24u
c2V0U2NyZWVuU2Npc3NvclJlY3QoRmxvYXRSZWN0KDUwLCA1MCwgMjAwLCAyMDApKTsKKworICAg
IG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9P
Q0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdl
dCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNF
KEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7Cisg
ICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEw
MCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5tYXJr
T2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9U
YXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNp
b24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkp
OworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNU
X09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50
TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZ
RVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwg
cGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKElu
dFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgy
MDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMCwg
MTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDAp
LCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVu
dExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURF
RF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIu
Z2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKKyAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgNTAsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDUwLCAxMDApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMDAsIDEw
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDIwMCwgMTAw
LCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
NTAsIDUwLCAyMDAsIDIwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCA1MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCAxMDAsIDIwMCwgMTAwKSwgb2NjbHVzaW9uLnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwg
MzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgNTAsIDEw
MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7Cit9CisKK1RF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZVNjaXNzb3JSZWN0T3Zlck5vVGlsZXMp
Cit7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CisgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBw
YXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsK
KyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsK
KyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0Rmls
dGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Cisg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGlu
dCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNl
KCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3Vu
ZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIG9jY2x1c2lvbi5zZXRTdXJmYWNlU2Np
c3NvclJlY3QoRmxvYXRSZWN0KDUwMCwgNTAwLCAxMDAsIDEwMCkpOworCisgICAgb2NjbHVzaW9u
LmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAg
IC8vIFRoZXNlIGFyZSBhZmZlY3RlZCBieSB0aGUgY2xpcCByZWN0LgorICAgIEVYUEVDVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwg
bGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNU
X09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIu
Z2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJ
bnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisK
KyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAg
IG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXll
ci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNF
KEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAw
LCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwg
cGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVE
RURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVy
LmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFy
ZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJl
Y3QoMjAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAyMDAsIDEw
MCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBF
Q1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCksIHBh
cmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVE
X0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5n
ZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRS
ZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAs
IDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkp
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDAsIDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwg
MCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5zdXJm
YWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMw
MCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZVVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwg
MTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZVVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAw
KSkuaXNFbXB0eSgpKTsKK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzY3JlZW5T
Y2lzc29yUmVjdE92ZXJOb1RpbGVzKQoreworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2Nj
bHVzaW9uOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVu
dExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGls
ZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0
ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9w
ZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVy
cyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAw
LCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBk
dW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAg
IHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBv
Y2NsdXNpb24uc2V0U2NyZWVuU2Npc3NvclJlY3QoRmxvYXRSZWN0KDUwMCwgNTAwLCAxMDAsIDEw
MCkpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKTsKKworICAgIC8vIFRoZXNlIGFyZSBhZmZlY3RlZCBieSB0aGUgY2xpcCBy
ZWN0LgorICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAw
LCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXll
ci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAs
IDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0ND
TFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdl
dCgpLCBsYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5
ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFj
ZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVu
ZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9P
Q0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXll
ci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJl
bnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgxMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAx
MDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQ
RUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBw
YXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURF
RF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdl
dCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZB
Q0UoSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExh
eWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEw
MCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDIwMCwgMTAw
LCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworCisgICAgb2Nj
bHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgwLCAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAz
MDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSku
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkp
OworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129810</attachid>
            <date>2012-03-01 21:59:43 -0800</date>
            <delta_ts>2012-03-02 09:41:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79927-20120302005942.patch</filename>
            <type>text/plain</type>
            <size>86381</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdjOTUwMTZiZGEwN2Vh
ZTE3MWEzYTJmMWFmYjUwYjYxZmRiZjkxOC4uOWNiYjNmM2RhZGE0MzA2MGE4NGRjNTYxMDg1ZTUy
YWVlNjE4YzgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAzLTAxICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBsb2dpYyB0byBDQ09j
Y2x1c2lvblRyYWNrZXIgdG8gb2NjbHVkZSBhbnl0aGluZyBvdXRzaWRlIG9mIHRoZQorICAgICAg
ICBjdXJyZW50IHNjcmVlbiBhbmQgdGFyZ2V0IHN1cmZhY2Ugc2Npc3NvciByZWN0cy4gV2hlbiB0
cmFja2luZworICAgICAgICBkYW1hZ2UgZm9yIHBhcnRpYWwgc3dhcHMsIHRoZSBzY2lzc29yIHJl
Y3RzIGFyZSBib3VuZGVkIGJ5IHRoZQorICAgICAgICB0cmFja2VkIGRhbWFnZSByZWN0cy4KKwor
ICAgICAgICBVbml0IHRlc3RzOiBDQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmg6Cisg
ICAgICAgIChSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3VyZmFjZUNocm9taXVtOjpkYW1hZ2VDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ojo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ojo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6OjpvY2Ns
dWRlZCk6CisgICAgICAgIChXZWJDb3JlOjo6OnN1cmZhY2VPY2NsdWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ojo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6c3VyZmFjZVVu
b2NjbHVkZWRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjo6OmxheWVyU2Npc3NvclJl
Y3RJblRhcmdldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Ojp0YXJnZXRTdXJmYWNlRGFt
YWdlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2Ns
dXNpb25UcmFja2VyLmg6CisgICAgICAgIChDQ09jY2x1c2lvblRyYWNrZXJCYXNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkYW1hZ2VDb250ZW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisKIDIwMTIt
MDItMjggIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogbW92ZSBET00gY291bnRlciBncmFwaHMgb3V0IG9mIGV4cGVyaW1lbnRh
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyMDdmZTgzZTkxMGEzMWEwNDI2Mjc2YzIz
YTZkNmMwZDQ4MzY4YjA5Li43MDcyNjY2NzY3ZWE4MDhhNTg1M2NhYTdhMGY5ZDc2MjgwZTcwZTUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTAx
ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQWRkIGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lv
blRyYWNrZXI6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXIpOgorICAgICAgICAoVGVzdENDT2NjbHVz
aW9uVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpz
ZXRTdXJmYWNlRGFtYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25U
cmFja2VyOjpyZXNldFN1cmZhY2VEYW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RD
Q09jY2x1c2lvblRyYWNrZXI6OnNldExheWVyU2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6cmVzZXRMYXllclNjaXNzb3JSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OmxheWVyU2Npc3NvclJlY3RJblRh
cmdldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdENDT2NjbHVzaW9uVHJhY2tlcjo6
dGFyZ2V0U3VyZmFjZURhbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAg
ICAgIChXZWJDb3JlKToKKwogMjAxMi0wMi0yOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNzkx
NyBhbmQgcjEwOTE4OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggOTA0
NTQyNWJjM2ZiZmYyM2M4MjFmZmZlOGE0YmIwNzM5NWIwZTI4Yy4uNTBlOGJiOTEzYzgxMGJhNWU3
NGZlMGU1MDQ2YmE5OGU4YWM5ZmU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmgKQEAgLTkxLDYgKzkxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lYXJlc3RBbmNlc3Rv
clRoYXRNb3Zlc1BpeGVscyhSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV9uZWFy
ZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMgPSBzdXJmYWNlOyB9CiAgICAgY29uc3QgUmVuZGVy
U3VyZmFjZUNocm9taXVtKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7
IHJldHVybiBtX25lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVsczsgfQogCisgICAgLy8gQSBi
b3VuZGluZyBib3ggYXJvdW5kIHRoZSBwYXJ0cyBvZiB0aGlzIHN1cmZhY2UgdGhhdCB3aWxsIGJl
IGRyYXduLCBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZQorICAgIC8vIG9mIHRoaXMgc3VyZmFjZS4K
KyAgICBJbnRSZWN0IGRhbWFnZUNvbnRlbnRSZWN0KGJvb2wgLyogdXNlRGFtYWdlVHJhY2tpbmcg
Ki8pIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRSZWN0KCk7IH0KKwogcHJpdmF0ZToKICAgICBMYXll
ckNocm9taXVtKiBtX293bmluZ0xheWVyOwogICAgIExheWVyQ2hyb21pdW0qIG1fbWFza0xheWVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKaW5kZXggYzU2MTFhYzI3YTZh
ZWM0YTdmYmQ2OTQwMjNkMzQzZjUyYmE1ZDIzYy4uMTY4MTFkNzM2YmY3NTgwZGZmYzNkYzRiYTUy
NDAyNDA3ZTg5N2E5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCkBA
IC0zOSw2ICszOSwyMCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlPgorQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBl
Pjo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZShJbnRSZWN0IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFj
ZSkKKyAgICA6IG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKHNjaXNzb3JSZWN0SW5TY3JlZW5T
cGFjZSkKKyAgICAsIG1fdXNlU3VyZmFjZURhbWFnZShmYWxzZSkKK3sKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDT2NjbHVz
aW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OkNDT2NjbHVzaW9u
VHJhY2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIGJvb2wgdXNlU3Vy
ZmFjZURhbWFnZSkKKyAgICA6IG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKHNjaXNzb3JSZWN0
SW5TY3JlZW5TcGFjZSkKKyAgICAsIG1fdXNlU3VyZmFjZURhbWFnZSh1c2VTdXJmYWNlRGFtYWdl
KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgogdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVy
U3VyZmFjZVR5cGU+OjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFj
ZVR5cGUqIG5ld1RhcmdldCkKIHsKICAgICBpZiAoIW1fc3RhY2suaXNFbXB0eSgpICYmIG1fc3Rh
Y2subGFzdCgpLnN1cmZhY2UgPT0gbmV3VGFyZ2V0KQpAQCAtMTkxLDYgKzIwNSw4IEBAIHZvaWQg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6bWFy
a09jY2x1ZGVkQmVoaW5kTGF5CiB7CiAgICAgQVNTRVJUKCFtX3N0YWNrLmlzRW1wdHkoKSk7CiAg
ICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCku
c3VyZmFjZSk7CisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAobGF5ZXItPmRyYXdPcGFjaXR5KCkgIT0gMSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjAyLDIzICsyMTgsMjYgQEAgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+OjptYXJrT2NjbHVkZWRCZWhpbmRMYXkKICAgICBtX3N0YWNrLmxh
c3QoKS5vY2NsdXNpb25JblRhcmdldC51bml0ZShjb21wdXRlT2NjbHVzaW9uQmVoaW5kTGF5ZXI8
TGF5ZXJUeXBlPihsYXllciwgY29udGVudFRvVGFyZ2V0U3VyZmFjZSkpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0s
IGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQorc3RhdGljIGlubGluZSBib29sIHRlc3RDb250ZW50
UmVjdE9jY2x1ZGVkKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBzY2lzc29y
UmVjdCwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24pCiB7Ci0gICAgRmxvYXRRdWFkIHRyYW5zZm9y
bWVkUXVhZCA9IGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChjb250ZW50
UmVjdCkpOwotICAgIHJldHVybiBvY2NsdXNpb24uY29udGFpbnModHJhbnNmb3JtZWRRdWFkLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1lZFJlY3QgPSBj
b250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoY29udGVudFJlY3QpKTsKKyAg
ICAvLyBUYWtlIHRoZSBlbmNsb3NpbmdJbnRSZWN0LCBhcyB3ZSB3YW50IHRvIGluY2x1ZGUgcGFy
dGlhbCBwaXhlbHMgaW4gdGhlIHRlc3QuCisgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gaW50ZXJz
ZWN0aW9uKGVuY2xvc2luZ0ludFJlY3QodHJhbnNmb3JtZWRSZWN0KSwgc2Npc3NvclJlY3QpOwor
ICAgIHJldHVybiB0YXJnZXRSZWN0LmlzRW1wdHkoKSB8fCBvY2NsdXNpb24uY29udGFpbnModGFy
Z2V0UmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+CiBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT46Om9jY2x1ZGVkKGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAogeworICAgIEFTU0VSVCghbV9zdGFjay5pc0Vt
cHR5KCkpOwogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5s
YXN0KCkuc3VyZmFjZSk7CiAKLSAgICBpZiAodGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29udGVu
dFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbikpCisgICAgaWYgKHRlc3RDb250ZW50UmVj
dE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXll
clR5cGU+KGxheWVyKSwgbV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIG1fc3RhY2subGFzdCgp
Lm9jY2x1c2lvbkluU2NyZWVuKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRlc3RD
b250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJh
bnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdl
dCkpCisgICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50
VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBsYXllclNjaXNzb3JS
ZWN0SW5UYXJnZXRTdXJmYWNlKGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJn
ZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjYs
MTkgKzI0NSwxOCBAQCBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5k
ZXJTdXJmYWNlVHlwZT46Om9jY2x1ZGVkKGNvbnN0IExheWVyVAogdGVtcGxhdGU8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KIGJvb2wgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3VyZmFjZU9jY2x1ZGVk
KGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVj
dCkgY29uc3QKIHsKLSAgICAvLyBBIHN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IGxheWVycyBk
cmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBuZWVkIHRvIHVzZSBvY2NsdXNpb24gZnJvbSBvbmUg
c3BvdCBkb3duIG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKICAg
ICBBU1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBzdXJmYWNlQ29udGVudFRvU2NyZWVuU3BhY2UgPSBjb250ZW50VG9TY3JlZW5T
cGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKKyAgICBJbnRSZWN0IHN1cmZhY2VDbGlw
cGVkQ29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGludGVyc2VjdGlvbihzdXJmYWNlQ29u
dGVudFJlY3QsIHRhcmdldFN1cmZhY2VEYW1hZ2VSZWN0KCkpKTsKIAotICAgIGNvbnN0IFN0YWNr
T2JqZWN0JiBzZWNvbmRMYXN0ID0gbV9zdGFja1ttX3N0YWNrLnNpemUoKS0yXTsKLSAgICBpZiAo
dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoc3VyZmFjZUNvbnRlbnRSZWN0LCBzdXJmYWNlQ29udGVu
dFRvU2NyZWVuU3BhY2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5TY3JlZW4pKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQSBzdXJmYWNlIGlzIG5vdCBv
Y2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1c2Ug
b2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2suCisgICAgUmVnaW9uIG9j
Y2x1c2lvbkluU2NyZWVuOworICAgIGlmIChtX3N0YWNrLnNpemUoKSA+PSAyKQorICAgICAgICBv
Y2NsdXNpb25JblNjcmVlbiA9IG1fc3RhY2tbbV9zdGFjay5zaXplKCktMl0ub2NjbHVzaW9uSW5T
Y3JlZW47CisKKyAgICByZXR1cm4gdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoc3VyZmFjZUNsaXBw
ZWRDb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihs
YXllciksIG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBvY2NsdXNpb25JblNjcmVlbik7CiB9
CiAKIC8vIERldGVybWluZXMgd2hhdCBwb3J0aW9uIG9mIHJlY3QsIGlmIGFueSwgaXMgdW5vY2Ns
dWRlZCAobm90IG9jY2x1ZGVkIGJ5IHJlZ2lvbikuIElmCkBAIC0yNTYsMjIgKzI3NCwyMCBAQCBz
dGF0aWMgaW5saW5lIEludFJlY3QgcmVjdFN1YnRyYWN0UmVnaW9uKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IFJlZ2lvbiYgcmVnaQogICAgIHJldHVybiBib3VuZHNSZWN0OwogfQogCi1zdGF0
aWMgSW50UmVjdCBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNm
b3JtLCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKK2lubGluZSBJbnRSZWN0IGNvbXB1dGVVbm9j
Y2x1ZGVkQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIHNj
aXNzb3JSZWN0LCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKIHsKLSAgICBGbG9hdFF1YWQgdHJh
bnNmb3JtZWRRdWFkID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNv
bnRlbnRSZWN0KSk7Ci0gICAgaWYgKCF0cmFuc2Zvcm1lZFF1YWQuaXNSZWN0aWxpbmVhcigpKQot
ICAgICAgICByZXR1cm4gY29udGVudFJlY3Q7Ci0gICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50
UmVjdCBhdCBlYWNoIHN0ZXAgaGVyZSwgYXMgd2Ugd2FudCB0byBjb250YWluIGFueSB1bm9jY2x1
ZGVkIHBhcnRpYWwgcGl4ZWxzIGluIHRoZSByZXN1bHRpbmcgSW50UmVjdC4KLSAgICBJbnRSZWN0
IHNocnVua1JlY3QgPSByZWN0U3VidHJhY3RSZWdpb24oZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zv
cm1lZFF1YWQuYm91bmRpbmdCb3goKSksIG9jY2x1c2lvbik7CisgICAgRmxvYXRSZWN0IHRyYW5z
Zm9ybWVkUmVjdCA9IGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChjb250
ZW50UmVjdCkpOworICAgIC8vIFRha2UgdGhlIGVuY2xvc2luZ0ludFJlY3QgYXQgZWFjaCBzdGVw
LCBhcyB3ZSB3YW50IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQgcGFydGlhbCBwaXhlbHMgaW4g
dGhlIHJlc3VsdGluZyBJbnRSZWN0LgorICAgIEludFJlY3Qgc2hydW5rUmVjdCA9IHJlY3RTdWJ0
cmFjdFJlZ2lvbihpbnRlcnNlY3Rpb24oZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1lZFJlY3Qp
LCBzY2lzc29yUmVjdCksIG9jY2x1c2lvbik7CiAgICAgSW50UmVjdCB1bm9jY2x1ZGVkUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QoY29udGVudFNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0
KEZsb2F0UmVjdChzaHJ1bmtSZWN0KSkpOwotICAgIC8vIFRoZSB1c2Ugb2YgZW5jbG9zaW5nSW50
UmVjdCwgd2l0aCBmbG9hdGluZyBwb2ludCByb3VuZGluZywgY2FuIGdpdmUgdXMgYSByZXN1bHQg
dGhhdCBpcyBub3QgYSBzdWItcmVjdCBvZiBjb250ZW50UmVjdCwgYnV0IG91cgotICAgIC8vIHJl
dHVybiB2YWx1ZSBzaG91bGQgYmUgYSBzdWItcmVjdC4KKyAgICAvLyBUaGUgcmVjdCBiYWNrIGlu
IGNvbnRlbnQgc3BhY2UgaXMgYSBib3VuZGluZyBib3ggYW5kIG1heSBleHRlbmQgb3V0c2lkZSBv
ZiB0aGUgb3JpZ2luYWwgY29udGVudFJlY3QsIHNvIGNsYW1wIGl0IHRvIHRoZSBjb250ZW50UmVj
dEJvdW5kcy4KICAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRSZWN0LCBjb250ZW50
UmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGU+CiBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllclR5cGUq
IGxheWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAgICBBU1NFUlQo
IW1fc3RhY2suaXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBjb250ZW50UmVjdDsKIApAQCAtMjgxLDggKzI5NywxMCBAQCBJbnRSZWN0IENDT2Nj
bHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2NjbHVk
ZWRDb250ZW50UgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNl
ID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRlbnRUb1Rh
cmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAKLSAgICBJbnRSZWN0IHVu
b2NjbHVkZWRJblNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJl
Y3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVl
bik7Ci0gICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxh
c3QoKS5vY2NsdXNpb25JblRhcmdldCk7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5TY3JlZW4g
PSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3Jl
ZW5TcGFjZSwgbV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIG1fc3RhY2subGFzdCgpLm9jY2x1
c2lvbkluU2NyZWVuKTsKKyAgICBpZiAodW5vY2NsdWRlZEluU2NyZWVuLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblRhcmdldCA9
IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1Rhcmdl
dFN1cmZhY2UsIGxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UobGF5ZXIpLCBtX3N0YWNr
Lmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCk7CiAKICAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVu
b2NjbHVkZWRJblNjcmVlbiwgdW5vY2NsdWRlZEluVGFyZ2V0KTsKIH0KQEAgLTI5MCwyNSArMzA4
LDM5IEBAIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogSW50UmVjdCBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpzdXJmYWNlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHN1cmZhY2VD
b250ZW50UmVjdCkgY29uc3QKIHsKLSAgICAvLyBBIHN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5
IGxheWVycyBkcmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBuZWVkIHRvIHVzZSBvY2NsdXNpb24g
ZnJvbSBvbmUgc3BvdCBkb3duIG9uIHRoZSBzdGFjay4KLSAgICBpZiAobV9zdGFjay5zaXplKCkg
PCAyKQotICAgICAgICByZXR1cm4gc3VyZmFjZUNvbnRlbnRSZWN0OwotCisgICAgQVNTRVJUKCFt
X3N0YWNrLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwog
ICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFjZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZh
Y2UpOwogCi0gICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSByZWN0IHRoYXQgY29udGFpbnMgYWxs
IHRoZSB2aXNpYmxlIHBhcnRzIG9mIHxjb250ZW50UmVjdHwgaW4gYm90aCBzY3JlZW4gc3BhY2Ug
YW5kIGluIHRoZSB0YXJnZXQgc3VyZmFjZS4KLSAgICAvLyBTbyB3ZSBmaW5kIHRoZSB2aXNpYmxl
IHBhcnRzIG9mIHxjb250ZW50UmVjdHwgaW4gZWFjaCBzcGFjZSwgYW5kIHRha2UgdGhlIGludGVy
c2VjdGlvbi4KKyAgICBJbnRSZWN0IHN1cmZhY2VDbGlwcGVkQ29udGVudFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KGludGVyc2VjdGlvbihzdXJmYWNlQ29udGVudFJlY3QsIHRhcmdldFN1cmZhY2VE
YW1hZ2VSZWN0KCkpKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVl
blNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7
CisgICAgLy8gQSBzdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRv
IGl0c2VsZiwgc28gd2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBv
biB0aGUgc3RhY2suCisgICAgUmVnaW9uIG9jY2x1c2lvbkluU2NyZWVuOworICAgIGlmIChtX3N0
YWNrLnNpemUoKSA+PSAyKQorICAgICAgICBvY2NsdXNpb25JblNjcmVlbiA9IG1fc3RhY2tbbV9z
dGFjay5zaXplKCktMl0ub2NjbHVzaW9uSW5TY3JlZW47CiAKLSAgICBjb25zdCBTdGFja09iamVj
dCYgc2Vjb25kTGFzdCA9IG1fc3RhY2tbbV9zdGFjay5zaXplKCktMl07Ci0gICAgSW50UmVjdCB1
bm9jY2x1ZGVkSW5TY3JlZW4gPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1cmZhY2VD
b250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5T
Y3JlZW4pOworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29tcHV0ZVVub2NjbHVk
ZWRDb250ZW50UmVjdChzdXJmYWNlQ2xpcHBlZENvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5T
cGFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zY2lzc29yUmVjdEluU2NyZWVuU3Bh
Y2UsIG9jY2x1c2lvbkluU2NyZWVuKTsKIAogICAgIHJldHVybiB1bm9jY2x1ZGVkSW5TY3JlZW47
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGU+CitJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJT
dXJmYWNlVHlwZT46OmxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgTGF5ZXJU
eXBlKiBsYXllcikgY29uc3QKK3sKKyAgICBJbnRSZWN0IGRhbWFnZSA9IG1fc3RhY2subGFzdCgp
LnN1cmZhY2UtPmRhbWFnZUNvbnRlbnRSZWN0KG1fdXNlU3VyZmFjZURhbWFnZSk7CisgICAgSW50
UmVjdCBjbGlwID0gbGF5ZXItPmNsaXBSZWN0KCk7CisgICAgaWYgKCFjbGlwLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbihkYW1hZ2UsIGNsaXApOworICAgIHJldHVybiBk
YW1hZ2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGU+CitJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT46OnRhcmdldFN1cmZhY2VEYW1hZ2VSZWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdGFjay5sYXN0KCkuc3VyZmFjZS0+ZGFtYWdlQ29udGVudFJlY3QobV91c2VT
dXJmYWNlRGFtYWdlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFt
ZSBSZW5kZXJTdXJmYWNlVHlwZT4KIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVu
U3BhY2UoKSBjb25zdAogewogICAgIEFTU0VSVCghbV9zdGFjay5pc0VtcHR5KCkpOwpAQCAtMzI0
LDYgKzM1Niw4IEBAIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5
cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6Y3VycmVudE9jY2x1CiAKIAogLy8gRGVjbGFyZSB0aGUg
cG9zc2libGUgZnVuY3Rpb25zIGhlcmUgZm9yIHRoZSBsaW5rZXIuCit0ZW1wbGF0ZSBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OkND
T2NjbHVzaW9uVHJhY2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpOwor
dGVtcGxhdGUgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0+OjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJ
blNjcmVlblNwYWNlLCBib29sIHVzZVN1cmZhY2VEYW1hZ2UpOwogdGVtcGxhdGUgdm9pZCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46
OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5l
d1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJv
bWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNl
KGNvbnN0IExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyLCBjb25zdCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0qIGZpbmlzaGVkVGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2Vy
QmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpsZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7CkBA
IC0zMzQsNyArMzY4LDExIEBAIHRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Ojp1CiB0ZW1wbGF0ZSBJbnRS
ZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNo
cm9taXVtPjo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllckNocm9taXVt
KiwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdDsKIHRlbXBsYXRlIGNv
bnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0Owog
dGVtcGxhdGUgY29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21p
dW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OmN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZh
Y2UoKSBjb25zdDsKK3RlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXll
ckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpsYXllclNjaXNzb3JSZWN0SW5UYXJn
ZXRTdXJmYWNlKGNvbnN0IExheWVyQ2hyb21pdW0qKSBjb25zdDsKK3RlbXBsYXRlIEludFJlY3Qg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0+Ojp0YXJnZXRTdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0OwogCit0ZW1wbGF0ZSBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpDQ09jY2x1c2lv
blRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKTsKK3RlbXBsYXRl
IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OkND
T2NjbHVzaW9uVHJhY2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIGJv
b2wgdXNlU3VyZmFjZURhbWFnZSk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFj
ZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2Nj
bHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmZpbmlzaGVk
VGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0
IENDUmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQpOwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFy
Z2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1RhcmdldCk7CkBAIC0z
NDUsNiArMzgzLDggQEAgdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPEND
TGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Ojp1bm9jY2x1ZGUKIHRlbXBsYXRlIEludFJlY3Qg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6c3Vy
ZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBDQ0xheWVySW1wbCosIGNvbnN0IEludFJl
Y3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBjb25zdCBSZWdpb24mIEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmN1cnJl
bnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3Q7CiB0ZW1wbGF0ZSBjb25zdCBSZWdpb24m
IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OmN1
cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdDsKK3RlbXBsYXRlIEludFJlY3Qg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6bGF5
ZXJTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShjb25zdCBDQ0xheWVySW1wbCopIGNvbnN0Owor
dGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1Jl
bmRlclN1cmZhY2U+Ojp0YXJnZXRTdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0OwogCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKaW5kZXgg
ZDFjODMzZTFhOWJhNGVlZGU5YWJkZjQzMDIxZTdlZDdiNGM0ZmYxNi4uMDI2Mzk2MTc5N2YyOWM0
ZjVmZDdiYWNlZTM5ZDQ4ZmEyNDhhYjkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFj
a2VyLmgKQEAgLTQzLDggKzQzLDEwIEBAIGNsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1bTsKIC8v
IEZpbmFsbHksIG9uY2UgZmluaXNoZWQgd2l0aCB0aGUgbGF5ZXIsIG9jY2x1c2lvbiBiZWhpbmQg
dGhlIGxheWVyIHNob3VsZCBiZSBtYXJrZWQgYnkgY2FsbGluZyBtYXJrT2NjbHVkZWRCZWhpbmRM
YXllcigpLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KIGNsYXNzIENDT2NjbHVzaW9uVHJhY2tlckJhc2UgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOwogcHVibGljOgotICAgIENDT2NjbHVz
aW9uVHJhY2tlckJhc2UoKSB7IH0KKyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlKEludFJlY3Qg
c2Npc3NvclJlY3RJblNjcmVlblNwYWNlKTsKKyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlKElu
dFJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBib29sIHVzZVN1cmZhY2VEYW1hZ2UpOwog
CiAgICAgLy8gQ2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBsYXllciByZXByZXNlbnRpbmcgaXRzZWxm
LiBJZiB0aGUgdGFyZ2V0IHdhcyBub3QgYWxyZWFkeSBjdXJyZW50LCB0aGVuIHRoaXMgaW5kaWNh
dGVzIHdlIGhhdmUgZW50ZXJlZCBhIG5ldyBzdXJmYWNlIHN1YnRyZWUuCiAgICAgdm9pZCBlbnRl
clRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIG5ld1RhcmdldCk7
CkBAIC05MCw4ICs5MiwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1
c2lvbiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBuZXcgY3VycmVudCBzdWJ0cmVl
LiBUaGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5
IHRoZXJlLgogICAgIFZlY3RvcjxTdGFja09iamVjdCwgMT4gbV9zdGFjazsKIAorICAgIC8vIEFs
bG93IHRlc3RzIHRvIG92ZXJyaWRlIHRoZXNlLgorICAgIHZpcnR1YWwgSW50UmVjdCB0YXJnZXRT
dXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBsYXllclNjaXNz
b3JSZWN0SW5UYXJnZXRTdXJmYWNlKGNvbnN0IExheWVyVHlwZSopIGNvbnN0OworCiBwcml2YXRl
OgotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDT2NjbHVzaW9uVHJhY2tlckJhc2UpOworICAg
IEludFJlY3QgbV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2U7CisgICAgYm9vbCBtX3VzZVN1cmZh
Y2VEYW1hZ2U7CiB9OwogCiB0eXBlZGVmIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJv
bWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiBDQ09jY2x1c2lvblRyYWNrZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCAxNjk5OTk4MDhlOGU0MGE5YWU0YjcxMzBhOTMz
YjNhOWUwZGM4MzBjLi5iZGI2ZjQ5YTRhN2I1YjY2MDdhNWZjZDQxMDliM2Q0OWZkNjM1ODExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTMxMCw1ICszMTAsMTMgQEAgYm9v
bCBDQ1JlbmRlclN1cmZhY2U6OnN1cmZhY2VQcm9wZXJ0eUNoYW5nZWRPbmx5RnJvbURlc2NlbmRh
bnQoKSBjb25zdAogICAgIHJldHVybiBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQgJiYgIW1fb3du
aW5nTGF5ZXItPmxheWVyUHJvcGVydHlDaGFuZ2VkKCk7CiB9CiAKK0ludFJlY3QgQ0NSZW5kZXJT
dXJmYWNlOjpkYW1hZ2VDb250ZW50UmVjdChib29sIHVzZURhbWFnZVRyYWNraW5nKSBjb25zdAor
eworICAgIEludFJlY3Qgc2Npc3NvciA9IGNvbnRlbnRSZWN0KCk7CisgICAgaWYgKHVzZURhbWFn
ZVRyYWNraW5nKQorICAgICAgICBzY2lzc29yLmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KG1f
ZGFtYWdlVHJhY2tlci0+Y3VycmVudERhbWFnZVJlY3QoKSkpOworICAgIHJldHVybiBzY2lzc29y
OworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCBlNWU2ODNhNTIzNmVhZDU5NTVhOGIzN2RmMTg3ZGUx
ZWVmZjg2N2QwLi5mYzgwOThmZWIxNTRiMmI1ZWJhNTE0ODQzOTZkMDQyMzIzN2EwNDE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtMTE0LDYgKzExNCwxMCBAQCBwdWJsaWM6CiAK
ICAgICBDQ0RhbWFnZVRyYWNrZXIqIGRhbWFnZVRyYWNrZXIoKSBjb25zdCB7IHJldHVybiBtX2Rh
bWFnZVRyYWNrZXIuZ2V0KCk7IH0KIAorICAgIC8vIEEgYm91bmRpbmcgYm94IGFyb3VuZCB0aGUg
cGFydHMgb2YgdGhpcyBzdXJmYWNlIHRoYXQgd2lsbCBiZSBkcmF3biwgaW4gdGhlIGNvb3JkaW5h
dGUgc3BhY2UKKyAgICAvLyBvZiB0aGlzIHN1cmZhY2UuCisgICAgSW50UmVjdCBkYW1hZ2VDb250
ZW50UmVjdChib29sIHVzZURhbWFnZVRyYWNraW5nKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2
b2lkIGRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbCosIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgU2tCaXRtYXAmIGZpbHRlckJpdG1hcCk7CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRleCA2NzhlYzk2NDUyYjBiYWVk
Njg3YWVmNjY2NjJkZjNkOGQ1MTA1ZGE4Li45NTM5OWFhOTZjYzkwODA3OGIyYWFkOGY4MzIxZWNj
NjQ0MTIzZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2Nj
bHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTY4LDE3ICs2OCwzOSBAQCBwdWJsaWM6CiAv
LyBBIHN1YmNsYXNzIHRvIGV4cG9zZSB0aGUgdG90YWwgY3VycmVudCBvY2NsdXNpb24uCiBjbGFz
cyBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlciB7CiBw
dWJsaWM6CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0IHNjcmVlblNjaXNzb3JS
ZWN0KQorICAgICAgICA6IENDT2NjbHVzaW9uVHJhY2tlcihzY3JlZW5TY2lzc29yUmVjdCkKKyAg
ICAgICAgLCBtX292ZXJyaWRlTGF5ZXJTY2lzc29yUmVjdChmYWxzZSkKKyAgICAgICAgLCBtX292
ZXJyaWRlU3VyZmFjZURhbWFnZVJlY3QoZmFsc2UpCisgICAgeworICAgIH0KKwogICAgIFJlZ2lv
biBvY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3QgeyByZXR1cm4gQ0NPY2NsdXNpb25UcmFj
a2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbjsgfQogICAgIFJlZ2lvbiBvY2Ns
dXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXI6
Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0OyB9CiAKICAgICB2b2lkIHNldE9jY2x1
c2lvbkluU2NyZWVuU3BhY2UoY29uc3QgUmVnaW9uJiByZWdpb24pIHsgQ0NPY2NsdXNpb25UcmFj
a2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IHJlZ2lvbjsgfQogICAgIHZv
aWQgc2V0T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKSB7IEND
T2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQgPSByZWdp
b247IH0KKworICAgIHZvaWQgc2V0U3VyZmFjZURhbWFnZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkgeyBtX292ZXJyaWRlU3VyZmFjZURhbWFnZVJlY3QgPSB0cnVlOyBtX3N1cmZhY2VEYW1hZ2VS
ZWN0ID0gcmVjdDt9CisgICAgdm9pZCByZXNldFN1cmZhY2VEYW1hZ2VSZWN0KCkgeyBtX292ZXJy
aWRlU3VyZmFjZURhbWFnZVJlY3QgPSBmYWxzZTsgfQorCisgICAgdm9pZCBzZXRMYXllclNjaXNz
b3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9vdmVycmlkZUxheWVyU2Npc3NvclJlY3Qg
PSB0cnVlOyBtX2xheWVyU2Npc3NvclJlY3QgPSByZWN0O30KKyAgICB2b2lkIHJlc2V0TGF5ZXJT
Y2lzc29yUmVjdCgpIHsgbV9vdmVycmlkZUxheWVyU2Npc3NvclJlY3QgPSBmYWxzZTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1
cmZhY2UoY29uc3QgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJp
ZGVMYXllclNjaXNzb3JSZWN0ID8gbV9sYXllclNjaXNzb3JSZWN0IDogQ0NPY2NsdXNpb25UcmFj
a2VyOjpsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKGxheWVyKTsgfQorICAgIHZpcnR1
YWwgSW50UmVjdCB0YXJnZXRTdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3Zl
cnJpZGVTdXJmYWNlRGFtYWdlUmVjdCA/IG1fc3VyZmFjZURhbWFnZVJlY3QgOiBDQ09jY2x1c2lv
blRyYWNrZXI6OnRhcmdldFN1cmZhY2VEYW1hZ2VSZWN0KCk7IH0KKworcHJpdmF0ZToKKyAgICBi
b29sIG1fb3ZlcnJpZGVMYXllclNjaXNzb3JSZWN0OworICAgIGJvb2wgbV9vdmVycmlkZVN1cmZh
Y2VEYW1hZ2VSZWN0OworICAgIEludFJlY3QgbV9sYXllclNjaXNzb3JSZWN0OworICAgIEludFJl
Y3QgbV9zdXJmYWNlRGFtYWdlUmVjdDsKIH07CiAKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0
IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50KCkpOwpAQCAtOTgsNiArMTIwLDEwIEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDAp
KTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAs
IDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0U3VyZmFjZURhbWFnZVJlY3QoSW50UmVjdCgwLCAw
LCAxMDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNl
KHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVo
aW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDMw
LCA3MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsK
QEAgLTExMSw2ICsxMzcsMTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFk
ZGVkVG9PY2NsdWRlZFJlZ2lvbikKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKICAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzEsIDcwLCA3
MCkpKTsKIAorICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMCwg
NzAsIDcwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAsIDcwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEs
IDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgMzEsIDcwLCA3MCkpKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5
ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCAzMCwgNzAsIDcwKSkuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0
KDI5LCAzMCwgMSwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDI5LCAyOSwgNzAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMjksIDI5LCA3MCwgNzApKSk7CkBAIC0xMjUsNyArMTU5LDYgQEAg
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbikK
IFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25X
aXRoUm90YXRpb24pCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zv
cm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
OwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwpAQCAtMTUw
LDYgKzE4MywxMCBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09j
Y2x1ZGVkUmVnaW9uV2l0aFJvdGF0aW9uKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgVGVzdEND
T2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7Cisg
ICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAw
KSk7CisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VEYW1hZ2VSZWN0KEludFJlY3QoMCwgMCwgMTAw
MCwgMTAwMCkpOworCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGxheWVyLmdldCgpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAs
IDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CkBAIC0x
NjMsNiArMjAwLDE0IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRv
T2NjbHVkZWRSZWdpb25XaXRoUm90YXRpb24pCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMx
LCA3MCwgNzApKSk7CiAKKyAgICBvY2NsdXNpb24ucmVzZXRMYXllclNjaXNzb3JSZWN0KCk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgz
MCwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMxLCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7CisgICAgb2NjbHVzaW9u
LnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpLmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgyOSwgMzAsIDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CiAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgyOSwgMjksIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSkpOwpAQCAtMTc3LDcgKzIy
Miw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRS
ZWdpb25XaXRoUm90YXRpb24pCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRk
ZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQogewogICAgIC8vIFRoaXMgdGVzdHMg
dGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2Ns
dXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudCgpKTsKQEAgLTIwMCw2ICsyNDQsMTAgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKIAogICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJl
Y3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0
KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRTdXJmYWNlRGFt
YWdlUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRl
clRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1
c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CiAgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCg1MCwgNTAsIDUwLCA1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVl
blNwYWNlKCkuYm91bmRzKCkpOwpAQCAtMjEzLDYgKzI2MSwxNCBAQCBURVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQog
ICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0
KDUxLCA1MCwgNTAsIDUwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MSwgNTAsIDUwKSkpOwogCisgICAgb2NjbHVzaW9u
LnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNU
X0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUwLCA1
MCwgNTApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0
KCksIEludFJlY3QoNTAsIDQ5LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNTAsIDUwLCA1MCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1
MSwgNTAsIDUwKSkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3Qo
MCwgMCwgMTAwMCwgMTAwMCkpOworCiAgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDUwLCA1MCwgNTApKS5pc0Vt
cHR5KCkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNDksIDUwLCAxLCA1MCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA1MCwg
NTAsIDUwKSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNDksIDQ5LCA1MCwgNTApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwg
NDksIDUwLCA1MCkpKTsKQEAgLTIyMiwxMiArMjc4LDIzIEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCiAgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MSwgNTEsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSkpOwog
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDEwMCwgNTAsIDEpLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkp
KTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MSwgNTAsIDUwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUxLCA1MCwg
NTApKSk7CisKKyAgICBvY2NsdXNpb24ucmVzZXRMYXllclNjaXNzb3JSZWN0KCk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoNTAsIDUwLCA1MCwgNTApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoNDksIDUwLCAxLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA1MCwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoNDksIDQ5LCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDUwLCA0OSwgNTAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDUxLCA0OSwgNDksIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCg1MSwgNTAsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUxLCA1
MCwgNTApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MSwgNTAsIDUwKSkuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MSwgMSwgNDkpLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNTEsIDUw
LCA1MCkpKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAs
IDEwMDAsIDEwMDApKTsKIH0KIAogVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFk
ZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKIHsKICAgICAvLyBUaGlzIHRl
c3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgVGVzdEND
T2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMjU3LDYgKzMyNCwxMCBAQCBURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRT
dXJmYWNlKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBv
Y2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExh
eWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9u
LnNldFN1cmZhY2VEYW1hZ2VSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAgICAg
b2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgp
KTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOwog
CkBAIC0yNzEsNiArMzQyLDE0IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJB
ZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCiAgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MSwgNzAp
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMCwgNDMwLCA2MCwgNzEpKSk7CiAKKyAgICBvY2NsdXNpb24ucmVzZXRMYXllclNjaXNz
b3JSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgp
LCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0Mjks
IDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTAsIDQzMCwgNjEsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzEpKSk7CisgICAg
b2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7
CisKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOwog
ICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0KCksIGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0yODMsNiArMzYyLDE2IEBAIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRo
Um90YXRlZFN1cmZhY2UpCiAgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2Nj
bHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgNDAsIDcwLCA2MCkpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVj
dCgzMCwgMzksIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDEsIDcwLCA2
MCkpKTsKKworICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwg
NzAsIDYwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEs
IDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMCwgNDEsIDcwLCA2MCkpKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5
ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKIAogCiAgICAgLyogSnVz
dGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbiBmcm9tIHxsYXllcnw6CkBAIC0zMTQs
NyArNDAzLDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2Ns
dWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVhZHlPblN0YWNrKQog
ewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcg
dXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0zNTAsNiArNDM4
LDEwIEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRS
ZWdpb25XaXRoU3VyZmFjZUFscmVhZHlPblN0YWNrCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDAp
KTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0xMCwgLTEwLCAx
MDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VEYW1hZ2VSZWN0KEludFJlY3Qo
LTEwLCAtMTAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2Nj
bHVkZWRCZWhpbmRMYXllcihjaGlsZDIuZ2V0KCkpOwogCkBAIC0zNzIsNiArNDY0LDE0IEBAIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRo
U3VyZmFjZUFscmVhZHlPblN0YWNrCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRl
ZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwg
NzApKSk7CiAKKyAgICBvY2NsdXNpb24ucmVzZXRMYXllclNjaXNzb3JSZWN0KCk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAs
IDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoOSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MjksIDYwLCA3MCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQz
MCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzApKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVy
U2Npc3NvclJlY3QoSW50UmVjdCgtMTAsIC0xMCwgMTAwMCwgMTAwMCkpOworCiAgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVj
dCgxMCwgNDMwLCA2MCwgNzApKS5pc0VtcHR5KCkpOwogICAgIC8vIFRoaXMgaXMgdGhlIGxpdHRs
ZSBwaWVjZSBub3Qgb2NjbHVkZWQgYnkgY2hpbGQyCiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCg5LCA0MzAsIDEsIDEwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5n
ZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKQEAgLTM4Nyw2ICs0ODcsMTcgQEAgVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhT
dXJmYWNlQWxyZWFkeU9uU3RhY2sKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDcwLCA0MzAs
IDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
NTAwLCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCks
IEludFJlY3QoMTAsIDQzMSwgNjAsIDcwKSkpOwogCisgICAgb2NjbHVzaW9uLnJlc2V0TGF5ZXJT
Y2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdl
dCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDks
IDQzMCwgNjAsIDgwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA2MCwgNzAp
KS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoLTEwLCA0MzAsIDYwLCA4MCkpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3Qo
MTEsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3
MCkpLmlzRW1wdHkoKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVj
dCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBi
eSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgogICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJl
Y3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOwogCkBAIC00NjUsNyAr
NTc2LDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRl
ZFJlZ2lvbldpdGhTdXJmYWNlQWxyZWFkeU9uU3RhY2sKIAogVEVTVChDQ09jY2x1c2lvblRyYWNr
ZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkT2ZmQXhpc1N1cmZh
Y2UpCiB7Ci0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNTAxLDYgKzYx
MSwxMCBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVk
UmVnaW9uV2l0aFJvdGF0ZWRPZmZBeGlzU3VyZmFjZQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAg
VGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAw
KSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAw
LCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VEYW1hZ2VSZWN0KEludFJlY3QoMCwg
MCwgMTAwMCwgMTAwMCkpOworCiAgICAgSW50UmVjdCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5
ZXJUcmFuc2Zvcm0ubWFwUmVjdChsYXllci0+dmlzaWJsZUxheWVyUmVjdCgpKTsKIAogICAgIG9j
Y2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7
CkBAIC01NTIsNyArNjY2LDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFk
ZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkT2ZmQXhpc1N1cmZhY2UKIFRFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVsdGlwbGVP
cGFxdWVMYXllcnMpCiB7CiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyB0
ZXN0IGJ1dCBub3cgd2UgbWFrZSBhIGZldyBvcGFxdWUgbGF5ZXJzIGluc2lkZSBvZiB8Y2hpbGR8
IHNvIHRoYXQgdGhlIG9jY2x1ZGVkIHBhcnRzIG9mIGNoaWxkIGFyZSBub3QgYSBzaW1wbGUgcmVj
dC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC01ODUsNiArNjk4LDEw
IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdp
b25XaXRoTXVsdGlwbGVPcGFxdWVMYXllcnMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0
Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsK
KyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEw
MDApKTsKKyAgICBvY2NsdXNpb24uc2V0U3VyZmFjZURhbWFnZVJlY3QoSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllcjIuZ2V0KCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihsYXllcjEuZ2V0KCkpOwpAQCAtNjYxLDcgKzc3OCw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVsdGlwbGVPcGFxdWVMYXll
cnMpCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3Zl
cmxhcHBpbmdTaWJsaW5nU3VyZmFjZXMpCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSBy
aWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CkBAIC02OTgsNiArODE0LDEwIEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNlcykKIAog
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKElu
dFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JS
ZWN0KEludFJlY3QoLTEwLCAtMTAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0U3Vy
ZmFjZURhbWFnZVJlY3QoSW50UmVjdCgtMTAsIC0xMCwgMTAwMCwgMTAwMCkpOworCiAgICAgb2Nj
bHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7
CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyMi5nZXQoKSk7CiAK
QEAgLTczNCw2ICs4NTQsMTEgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNl
T2NjbHVzaW9uV2l0aE92ZXJsYXBwaW5nU2libGluZ1N1cmZhY2VzKQogCiAgICAgLy8gU3VyZmFj
ZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZiwgYnV0IHRo
ZSB8Y2hpbGQxfCBzdXJmYWNlIHNob3VsZCBiZSBvY2NsdWRlZCBieSB0aGUgfGNoaWxkMnwgc3Vy
ZmFjZS4KICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQzMCwgMTAsIDcwKSwgb2NjbHVz
aW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAs
IDQzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0MzAsIDIw
LCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQo
KSwgSW50UmVjdCgtMTAsIDQzMCwgODAsIDcwKSkpOworCisgICAgb2NjbHVzaW9uLnJlc2V0U3Vy
ZmFjZURhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDQzMCwgMTAs
IDcwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQxLmdldCgp
LCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzApKSk7CisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VE
YW1hZ2VSZWN0KEludFJlY3QoLTEwLCAtMTAsIDEwMDAsIDEwMDApKTsKIAogICAgIG9jY2x1c2lv
bi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOwogICAgIG9jY2x1c2lvbi5m
aW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGlsZDEtPnJlbmRlclN1
cmZhY2UoKSk7CkBAIC03ODcsNyArOTEyLDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0
LCBzdXJmYWNlT2NjbHVzaW9uV2l0aE92ZXJsYXBwaW5nU2libGluZ1N1cmZhY2VzKQogVEVTVChD
Q09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFjZSkKIHsK
ICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVz
ZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTgzMSw2ICs5NTUs
MTAgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3Jl
ZW5TcGFjZSkKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIg
b2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRM
YXllclNjaXNzb3JSZWN0KEludFJlY3QoLTIwLCAtMjAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2Ns
dXNpb24uc2V0U3VyZmFjZURhbWFnZVJlY3QoSW50UmVjdCgtMjAsIC0yMCwgMTAwMCwgMTAwMCkp
OworCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDItPnJlbmRl
clN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
Mi5nZXQoKSk7CiAKQEAgLTg0NSw2ICs5NzMsMTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFjZSkKICAgICBFWFBFQ1RfRkFMU0Uob2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzEsIDgwKSkp
OwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRS
ZWN0KC0xMCwgNDIwLCA3MCwgODEpKSk7CiAKKyAgICBvY2NsdXNpb24ucmVzZXRMYXllclNjaXNz
b3JSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQo
KSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTExLCA0MjAsIDcwLCA4MCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0x
MCwgNDE5LCA3MCwgODApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNo
aWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzEsIDgwKSkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEwLCA0MjAsIDcwLCA4
MSkpKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0yMCwgLTIw
LCAxMDAwLCAxMDAwKSk7CisKICAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGlu
Z3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEw
LCA0MjAsIDcwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNo
aWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOwogICAgIEVYUEVDVF9GQUxT
RShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgzMCwgMjUw
LCAxLCAxKSkpOwpAQCAtODY3LDEyICsxMDAzLDI0IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCiAgICAgRVhQRUNUX0ZBTFNFKG9j
Y2x1c2lvbi5vY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoLTEwLCA0MzAsIDgwLCA3MSkp
KTsKIAogICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcg
aW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxkMXwgc3VyZmFjZSBzaG91bGQgYmUgb2NjbHVkZWQg
YnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgtMTAs
IDQzMCwgMTAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hp
bGQxLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3
MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hp
bGQxLmdldCgpLCBJbnRSZWN0KC0xLCA0MzAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
b2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDI5LCA3
MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hp
bGQxLmdldCgpLCBJbnRSZWN0KDEsIDQzMCwgNzAsIDgwKSkpOwotICAgIEVYUEVDVF9GQUxTRShv
Y2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzEsIDcw
LCA4MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDMwLCAxMCwgNzApLCBv
Y2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZDEuZ2V0KCksIEludFJl
Y3QoLTEwLCA0MzAsIDgwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0yMCwg
NDMwLCAyMCwgODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGls
ZDEuZ2V0KCksIEludFJlY3QoLTIwLCA0MzAsIDkwLCA4MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGls
ZDEuZ2V0KCksIEludFJlY3QoLTEsIDQzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9GQUxTRShv
Y2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MjksIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGls
ZDEuZ2V0KCksIEludFJlY3QoMSwgNDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMxLCA3MCwg
NzApKSk7CisKKyAgICBvY2NsdXNpb24ucmVzZXRMYXllclNjaXNzb3JSZWN0KCk7CisgICAgb2Nj
bHVzaW9uLnJlc2V0U3VyZmFjZURhbWFnZVJlY3QoKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KC0xMCwgNDMwLCAxMCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50
UmVjdChjaGlsZDEuZ2V0KCksIEludFJlY3QoLTIwLCA0MzAsIDkwLCA4MCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgw
LCA0MzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2Ns
dWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoLTEsIDQzMCwgNzAsIDcwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAs
IDQyOSwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVk
ZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDEsIDQzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQz
MSwgNzAsIDcwKSkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3Qo
LTIwLCAtMjAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0U3VyZmFjZURhbWFnZVJl
Y3QoSW50UmVjdCgtMjAsIC0yMCwgMTAwMCwgMTAwMCkpOwogCiAgICAgb2NjbHVzaW9uLm1hcmtP
Y2NsdWRlZEJlaGluZExheWVyKGNoaWxkMS5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVk
VGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDEuZ2V0KCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgp
KTsKQEAgLTkyNiw3ICsxMDc0LDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJm
YWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFjZSkKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
c3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogewogICAg
IC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4K
LSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtOTc1LDYgKzExMjIsMTAg
QEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5T
cGFjZURpZmZlcmVudFRyYW5zZm9ybXMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAg
ICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0zMCwgLTMwLCAxMDAwLCAx
MDAwKSk7CisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VEYW1hZ2VSZWN0KEludFJlY3QoLTMwLCAt
MzAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOwogCkBAIC0xMDcxLDcgKzEyMjIsNiBAQCBURVNUKEND
T2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNlRGlmZmVy
ZW50VHJhbnNmb3JtcykKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgb2NjbHVzaW9uSW50
ZXJhY3Rpb25XaXRoRmlsdGVycykKIHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0
IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBv
Y2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gYmx1
ckxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
KCkpOwpAQCAtMTEyMSw2ICsxMjcxLDEwIEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
b2NjbHVzaW9uSW50ZXJhY3Rpb25XaXRoRmlsdGVycykKIAogICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAw
MCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAw
MCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRTdXJmYWNlRGFtYWdlUmVjdChJbnRSZWN0KDAs
IDAsIDEwMDAsIDEwMDApKTsKKwogICAgIC8vIE9wYWNpdHkgbGF5ZXIgd29uJ3QgY29udHJpYnV0
ZSB0byBvY2NsdXNpb24uCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShv
cGFjaXR5TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRl
ZEJlaGluZExheWVyKG9wYWNpdHlMYXllci5nZXQoKSk7CkBAIC0xMTcwLDQgKzEzMjQsNTc5IEBA
IFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgb2NjbHVzaW9uSW50ZXJhY3Rpb25XaXRoRmls
dGVycykKICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1cmZh
Y2UoKS5yZWN0cygpLnNpemUoKSk7CiB9CiAKKyNkZWZpbmUgRVhQRUNUX09DQ0xVREVEX0xBWUVS
X1NVUkZBQ0UocmVjdCwgbGF5ZXIsIHN1cmZhY2VsYXllcikgXAorICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdWRlZChsYXllciwgcmVjdCkpOyBcCisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLnN1cmZhY2VPY2NsdWRlZChzdXJmYWNlbGF5ZXIsIHJlY3QpKTsKKworI2RlZmluZSBFWFBF
Q1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UocmVjdCwgbGF5ZXIsIHN1cmZhY2VsYXllcikg
XAorICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIsIHJlY3QpKTsgXAor
ICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKHN1cmZhY2VsYXllciwg
cmVjdCkpOworCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyU2Npc3NvclJlY3RP
dmVyVGlsZSkKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBw
YXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+
IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRk
Q2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAg
RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVu
ZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0
ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZp
bHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAs
IDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExh
eWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisK
KyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisg
ICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAx
MDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgyMDAsIDEw
MCwgMTAwLCAxMDApKTsKKyAgICBvY2NsdXNpb24uc2V0U3VyZmFjZURhbWFnZVJlY3QoSW50UmVj
dCgyMDAsIDEwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwg
MCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgp
LCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEw
MCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNpb24ucmVzZXRMYXll
clNjaXNzb3JSZWN0KCk7CisgICAgb2NjbHVzaW9uLnJlc2V0U3VyZmFjZURhbWFnZVJlY3QoKTsK
KyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAs
IDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVy
U2Npc3NvclJlY3QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKTsKKyAgICBvY2NsdXNpb24u
c2V0U3VyZmFjZURhbWFnZVJlY3QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKTsKKworICAg
IG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2Nj
bHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50
UmVjdCgwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEw
MCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBF
Q1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJl
bnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgp
LCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJG
QUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVu
dExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0
KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMjAwLCAxMDAs
IDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNU
X09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApLCBwYXJl
bnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0
KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVu
ZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnN1cmZhY2VV
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAw
KSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNzb3JSZWN0
T3ZlclRpbGUpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4g
cGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAg
IEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBl
bmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhm
aWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAw
LCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRM
YXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwor
CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKwor
ICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMjAwLCAxMDAsIDEw
MCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwg
bGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEw
MCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKworICAgIC8vIE9jY2x1ZGVkIHNp
bmNlIGl0cyBvdXRzaWRlIHRoZSBzdXJmYWNlIGJvdW5kcy4KKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBs
YXllci5nZXQoKSk7CisKKyAgICAvLyBUZXN0IHdpdGhvdXQgYW55IHNjaXNzb3JzLgorICAgIG9j
Y2x1c2lvbi5zZXRTdXJmYWNlRGFtYWdlUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsK
KyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEw
MDApKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAs
IDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lv
bi5yZXNldFN1cmZhY2VEYW1hZ2VSZWN0KCk7CisgICAgb2NjbHVzaW9uLnJlc2V0TGF5ZXJTY2lz
c29yUmVjdCgpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
LmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCks
IHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJ
bnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAw
LCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSwg
cGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09D
Q0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRM
YXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBw
YXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50
UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdl
dCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMjAw
LCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAg
RVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDAp
LCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworCisgICAgb2NjbHVzaW9u
LmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKwor
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAz
MDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBv
Y2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJTY2lzc29yUmVjdE92ZXJDdWxsZWRUaWxlKQoreworICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5h
ZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmls
dGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFy
ZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmls
dGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAs
IDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7
CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lv
bihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0U3VyZmFjZURh
bWFnZVJlY3QoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKTsKKyAgICBvY2NsdXNpb24uc2V0
TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpOworCisgICAgb2Nj
bHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsK
KworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMCwgMTAwLCAx
MDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5n
ZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAs
IDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09D
Q0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5n
ZXQoKSwgbGF5ZXIuZ2V0KCkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5
ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJf
U1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFy
ZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJl
Y3QoMTAwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQo
KSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwg
MTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwg
cGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVE
RURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5n
ZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJG
QUNFKEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRM
YXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgx
MDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkp
OworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEw
MCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9j
Y2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFj
ZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAz
MDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc2NyZWVuU2Npc3NvclJl
Y3RPdmVyQ3VsbGVkVGlsZSkKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIp
OworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9u
cygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUo
MC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRG
aWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgxMDAs
IDEwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJf
U1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAw
LCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9M
QVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXll
ci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3Qo
MTAwLCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKworICAgIG9j
Y2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVz
aW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgwLCAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7
CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAxMDAsIDEwMCwg
MTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRM
YXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCks
IHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJ
bnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXll
ci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgyMDAs
IDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAg
ICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDAp
LCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5
ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJf
U1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBw
YXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAw
LCAzMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCAxMDAs
IDEwMCwgMTAwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3QsIGxheWVyU2Npc3NvclJlY3RPdmVyUGFydGlhbFRpbGVzKQoreworICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRS
ZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7
CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZp
bHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFKSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXIt
PnNldEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsK
KworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0Q0NPY2NsdXNpb25U
cmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNp
b24uc2V0U3VyZmFjZURhbWFnZVJlY3QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSk7CisgICAg
b2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSk7
CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJT
dXJmYWNlKCkpOworCisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJl
Y3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVD
VF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApLCBs
YXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJf
U1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0
KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwg
MTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5s
ZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwg
MCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAg
IEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCks
IHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xV
REVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIu
Z2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VS
RkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJl
bnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgy
MDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsK
KyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgwLCAyMDAsIDEw
MCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBF
Q1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDAp
LCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1Rf
T0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCksIHBhcmVu
dExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSwgb2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cisg
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDUwLCA1MCwgNTApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkp
KTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCA1MCwgMTAwKSwgb2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAz
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCA1MCwgMTAw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCAy
MDAsIDEwMCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgNTApLCBvY2NsdXNpb24uc3VyZmFjZVVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgMTAwLCAyMDAsIDEwMCksIG9jY2x1
c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAs
IDUwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMTAwLCAyMDAsIDEwMCwgNTApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOwor
fQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNzb3JSZWN0T3ZlclBh
cnRpYWxUaWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisg
ICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFw
cGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBG
aWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJz
KGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgz
MDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVu
dExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7
CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlw
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCg1MCwgNTAsIDIw
MCwgMjAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9TVVJG
QUNFKEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAw
LCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVE
RURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwg
bGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRS
ZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgpLCBsYXllci5nZXQoKSk7CisKKyAg
ICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9j
Y2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+
cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0
KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMTAwLCAx
MDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQ
RUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwgcGFy
ZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCksIHBhcmVudExheWVyLmdl
dCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX05PVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBh
cmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgw
LCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgpKTsK
KyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwg
MTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVY
UEVDVF9OT1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEw
MCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisKKyAgICBvY2NsdXNp
b24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwor
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAz
MDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDUwLCA1MCwgNTApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAz
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCA1MCwgMTAw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MCwgMTAwLCAzMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAw
LCA1MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMTAwLCAyMDAsIDEwMCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgNTApLCBvY2NsdXNpb24u
c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwg
MzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgMTAwLCAyMDAsIDEw
MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MjAwLCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMTAwLCAyMDAsIDEwMCwgNTApLCBvY2NsdXNpb24uc3VyZmFjZVVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwg
MTAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyU2Npc3NvclJl
Y3RPdmVyTm9UaWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVu
dC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOwor
CisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygp
LmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41
LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0
ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBh
cmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1
MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRD
bGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldFN1cmZhY2VEYW1hZ2VSZWN0KEludFJlY3Qo
NTAwLCA1MDAsIDEwMCwgMTAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3Qo
SW50UmVjdCg1MDAsIDUwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdl
dFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0ND
TFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCks
IGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0
KDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVD
VF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxheWVy
LmdldCgpLCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0Uo
SW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOwor
CisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAg
ICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5
ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFD
RShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEw
MCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAg
IEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCks
IHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xV
REVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXll
ci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9T
VVJGQUNFKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBh
cmVudExheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRS
ZWN0KDIwMCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0
KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMjAwLCAx
MDAsIDEwMCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQ
RUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApLCBw
YXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURF
RF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIu
Z2V0KCksIHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDAp
KS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAs
IDAsIDMwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3Vy
ZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAz
MDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VV
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAs
IDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEw
MCkpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc2NyZWVu
U2Npc3NvclJlY3RPdmVyTm9UaWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQo
bGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3Bl
cmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVy
LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwor
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVy
ZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVj
dCg1MDAsIDUwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEw
MCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NM
VURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIGxheWVyLmdldCgp
LCBsYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVj
dCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0KCkpOworCisgICAg
b2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2Ns
dXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkp
OworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJl
bmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExheWVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDEwMCwgMTAw
LCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVD
VF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCksIHBhcmVu
dExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09DQ0xVREVEX0xB
WUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQo
KSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNF
KEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCksIHBhcmVudExh
eWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfT0NDTFVERURfTEFZRVJfU1VSRkFDRShJbnRSZWN0KDIw
MCwgMCwgMTAwLCAxMDApLCBwYXJlbnRMYXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlFUl9TVVJGQUNFKEludFJlY3QoMCwgMjAwLCAxMDAsIDEw
MCksIHBhcmVudExheWVyLmdldCgpLCBwYXJlbnRMYXllci5nZXQoKSk7CisgICAgRVhQRUNUX09D
Q0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApLCBwYXJlbnRM
YXllci5nZXQoKSwgcGFyZW50TGF5ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9PQ0NMVURFRF9MQVlF
Ul9TVVJGQUNFKEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSwgcGFyZW50TGF5ZXIuZ2V0KCks
IHBhcmVudExheWVyLmdldCgpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAz
MDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKS5pc0Vt
cHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgp
LCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MTAwLCAyMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMw
MCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFjZVVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEw
MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkp
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpLmlz
RW1wdHkoKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJTY2lzc29y
UmVjdEZvckxheWVyT2ZmT3JpZ2luKQoreworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChs
YXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVy
YXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXIt
PnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MTAwLCAxMDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4
dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAg
cGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5k
ZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgLy8gVGhpcyBsYXllciBp
cyB0cmFuc2xhdGVkIHdoZW4gZHJhd24gaW50byBpdHMgdGFyZ2V0LiBTbyBpZiB0aGUgc2Npc3Nv
ciByZWN0IGdpdmVuIGZyb20gdGhlIHRhcmdldCBzdXJmYWNlCisgICAgLy8gaXMgbm90IGluIHRo
YXQgdGFyZ2V0IHNwYWNlLCB0aGVuIGFmdGVyIHRyYW5zbGF0aW5nIHRoZXNlIHF1ZXJ5IHJlY3Rz
IGludG8gdGhlIHRhcmdldCwgdGhleSB3aWxsIGZhbGwgb3V0c2lkZQorICAgIC8vIHRoZSBzY2lz
c29yIGFuZCBiZSBjb25zaWRlcmVkIG9jY2x1ZGVkLgorICAgIEVYUEVDVF9OT1RfT0NDTFVERURf
TEFZRVJfU1VSRkFDRShJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVy
LmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgw
LCAxMDAsIDEwMCwgMTAwKSwgbGF5ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1Rf
Tk9UX09DQ0xVREVEX0xBWUVSX1NVUkZBQ0UoSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSwgbGF5
ZXIuZ2V0KCksIGxheWVyLmdldCgpKTsKKyAgICBFWFBFQ1RfTk9UX09DQ0xVREVEX0xBWUVSX1NV
UkZBQ0UoSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApLCBsYXllci5nZXQoKSwgbGF5ZXIuZ2V0
KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129912</attachid>
            <date>2012-03-02 09:41:13 -0800</date>
            <delta_ts>2012-03-02 18:40:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79927-20120302124111.patch</filename>
            <type>text/plain</type>
            <size>99327</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE0NTRiYjQ5NzYyMjZk
NTU4MTM1YWU1NDg4ZmFjZDFjNWJiNTUwMy4uMmFiMjE0ZmVlNWU5MWQyNTg5YTQ4Y2Y0MTZkN2Fi
OTg4YWZlOGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTAyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBsb2dpYyB0byBDQ09j
Y2x1c2lvblRyYWNrZXIgdG8gb2NjbHVkZSBhbnl0aGluZyBvdXRzaWRlIG9mIHRoZQorICAgICAg
ICBjdXJyZW50IHNjcmVlbiBhbmQgdGFyZ2V0IHN1cmZhY2Ugc2Npc3NvciByZWN0cy4gV2hlbiB0
cmFja2luZworICAgICAgICBkYW1hZ2UgZm9yIHBhcnRpYWwgc3dhcHMsIHRoZSBzY2lzc29yIHJl
Y3RzIGFyZSBib3VuZGVkIGJ5IHRoZQorICAgICAgICB0cmFja2VkIGRhbWFnZSByZWN0cy4KKwor
ICAgICAgICBVbml0IHRlc3RzOiBDQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6OjpvY2NsdWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6bGF5ZXJTY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEJhc2UpOgor
ICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VyQmFzZSk6CisKIDIwMTItMDMtMDIgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIG1l
ZGlhL21lZGlhLWNhbi1wbGF5LWZsYWMtYXVkaW8uaHRtbCBmYWlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBkZjFjMjVlZDQ5NjViN2IwYWVhOGMzOGUwODRhODhhYTgyZTg4MzA3Li5i
OTJiMmVhMWZkOWQ3MjdjNGNiNTU5NGYxMjE2M2ZjMWE2YWNiNzU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTAyICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGNsaXBwaW5nIHRv
IHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OlRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIpOgorICAgICAgICAoVGVzdENDT2NjbHVzaW9uVHJhY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRMYXllclNjaXNzb3JSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OnJlc2V0TGF5ZXJT
Y2lzc29yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjps
YXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGVzdERhbWFn
ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0RGFtYWdlQ2xpZW50OjpkYW1hZ2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REYW1hZ2VDbGllbnQ6OlRlc3REYW1hZ2VDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdERhbWFnZUNsaWVudDo6c2V0RGFtYWdlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wMy0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9s
aXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIE1h
a2UgcGFyc2VyIGNvZGUgbm90IGRlcGVuZCBvbiBOYW1lZE5vZGVNYXAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJh
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q09jY2x1c2lvblRyYWNrZXIuY3BwCmluZGV4IGM1NjExYWMyN2E2YWVjNGE3ZmJkNjk0MDIzZDM0
M2Y1MmJhNWQyM2MuLjg0MzNiYzAwNzJjNTQwYThhN2MwMmNhYjM3YzQyY2EyMTFmOGRiM2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T2NjbHVzaW9uVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcApAQCAtMzksNiArMzksMjAgQEAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDT2NjbHVzaW9u
VHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OkNDT2NjbHVzaW9uVHJh
Y2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpCisgICAgOiBtX3NjaXNz
b3JSZWN0SW5TY3JlZW5TcGFjZShzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpCisgICAgLCBtX3N1
cmZhY2VEYW1hZ2VDbGllbnQoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBl
LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OkNDT2NjbHVzaW9uVHJhY2tlckJhc2UoSW50UmVj
dCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIGNvbnN0IERhbWFnZUNsaWVudFR5cGUqIHN1cmZh
Y2VEYW1hZ2VDbGllbnQpCisgICAgOiBtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZShzY2lzc29y
UmVjdEluU2NyZWVuU3BhY2UpCisgICAgLCBtX3N1cmZhY2VEYW1hZ2VDbGllbnQoc3VyZmFjZURh
bWFnZUNsaWVudCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFt
ZSBSZW5kZXJTdXJmYWNlVHlwZT4KIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5
cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJl
bmRlclN1cmZhY2VUeXBlKiBuZXdUYXJnZXQpCiB7CiAgICAgaWYgKCFtX3N0YWNrLmlzRW1wdHko
KSAmJiBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlID09IG5ld1RhcmdldCkKQEAgLTE5MSw2ICsyMDUs
OCBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheQogewogICAgIEFTU0VSVCghbV9zdGFjay5pc0Vt
cHR5KCkpOwogICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09IG1fc3Rh
Y2subGFzdCgpLnN1cmZhY2UpOworICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGxheWVyLT5kcmF3T3BhY2l0eSgpICE9IDEpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIwMiw0MSArMjE4LDI2IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5CiAgICAg
bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQudW5pdGUoY29tcHV0ZU9jY2x1c2lvbkJl
aGluZExheWVyPExheWVyVHlwZT4obGF5ZXIsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2UpKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNl
VHJhbnNmb3JtLCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCB0
ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3QgSW50UmVj
dCYgc2Npc3NvclJlY3QsIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQogewotICAgIEZsb2F0UXVh
ZCB0cmFuc2Zvcm1lZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1
YWQoY29udGVudFJlY3QpKTsKLSAgICByZXR1cm4gb2NjbHVzaW9uLmNvbnRhaW5zKHRyYW5zZm9y
bWVkUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3Jt
ZWRSZWN0ID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KGNvbnRlbnRS
ZWN0KSk7CisgICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCwgYXMgd2Ugd2FudCB0byBp
bmNsdWRlIHBhcnRpYWwgcGl4ZWxzIGluIHRoZSB0ZXN0LgorICAgIEludFJlY3QgdGFyZ2V0UmVj
dCA9IGludGVyc2VjdGlvbihlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUmVjdCksIHNjaXNz
b3JSZWN0KTsKKyAgICByZXR1cm4gdGFyZ2V0UmVjdC5pc0VtcHR5KCkgfHwgb2NjbHVzaW9uLmNv
bnRhaW5zKHRhcmdldFJlY3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpvY2NsdWRlZChjb25zdCBMYXllclR5cGUqIGxh
eWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIW1f
c3RhY2suaXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09
IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOwogCi0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1
ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+
KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pKQorICAgIGlmICh0ZXN0
Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2VUcmFu
c2Zvcm08TGF5ZXJUeXBlPihsYXllciksIG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBtX3N0
YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvVGFyZ2V0
U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5UYXJnZXQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Ci1ib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46OnN1cmZhY2VPY2NsdWRlZChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRS
ZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0Ci17Ci0gICAgLy8gQSBzdXJmYWNlIGlzIG5v
dCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1
c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2suCi0gICAgaWYgKG1f
c3RhY2suc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFjZSgp
ID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c3VyZmFjZUNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zv
cm08TGF5ZXJUeXBlPihsYXllcik7Ci0KLSAgICBjb25zdCBTdGFja09iamVjdCYgc2Vjb25kTGFz
dCA9IG1fc3RhY2tbbV9zdGFjay5zaXplKCktMl07Ci0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9j
Y2x1ZGVkKHN1cmZhY2VDb250ZW50UmVjdCwgc3VyZmFjZUNvbnRlbnRUb1NjcmVlblNwYWNlLCBz
ZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKSkKKyAgICBpZiAodGVzdENvbnRlbnRSZWN0T2Nj
bHVkZWQoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJU
eXBlPihsYXllciksIGxheWVyU2Npc3NvclJlY3QobGF5ZXIpLCBtX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblRhcmdldCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTI1NiwyMiArMjU3LDIwIEBAIHN0YXRpYyBpbmxpbmUgSW50UmVjdCByZWN0U3VidHJh
Y3RSZWdpb24oY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgUmVnaW9uJiByZWdpCiAgICAgcmV0
dXJuIGJvdW5kc1JlY3Q7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVkQ29u
dGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQor
c3RhdGljIGlubGluZSBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50
U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBjb25zdCBSZWdpb24m
IG9jY2x1c2lvbikKIHsKLSAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRRdWFkID0gY29udGVudFNw
YWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7Ci0gICAgaWYgKCF0
cmFuc2Zvcm1lZFF1YWQuaXNSZWN0aWxpbmVhcigpKQotICAgICAgICByZXR1cm4gY29udGVudFJl
Y3Q7Ci0gICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCBhdCBlYWNoIHN0ZXAgaGVyZSwg
YXMgd2Ugd2FudCB0byBjb250YWluIGFueSB1bm9jY2x1ZGVkIHBhcnRpYWwgcGl4ZWxzIGluIHRo
ZSByZXN1bHRpbmcgSW50UmVjdC4KLSAgICBJbnRSZWN0IHNocnVua1JlY3QgPSByZWN0U3VidHJh
Y3RSZWdpb24oZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1lZFF1YWQuYm91bmRpbmdCb3goKSks
IG9jY2x1c2lvbik7CisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybWVkUmVjdCA9IGNvbnRlbnRTcGFj
ZVRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChjb250ZW50UmVjdCkpOworICAgIC8vIFRha2Ug
dGhlIGVuY2xvc2luZ0ludFJlY3QgYXQgZWFjaCBzdGVwLCBhcyB3ZSB3YW50IHRvIGNvbnRhaW4g
YW55IHVub2NjbHVkZWQgcGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3VsdGluZyBJbnRSZWN0Lgor
ICAgIEludFJlY3Qgc2hydW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihpbnRlcnNlY3Rpb24o
ZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1lZFJlY3QpLCBzY2lzc29yUmVjdCksIG9jY2x1c2lv
bik7CiAgICAgSW50UmVjdCB1bm9jY2x1ZGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29udGVu
dFNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdChzaHJ1bmtSZWN0KSkp
OwotICAgIC8vIFRoZSB1c2Ugb2YgZW5jbG9zaW5nSW50UmVjdCwgd2l0aCBmbG9hdGluZyBwb2lu
dCByb3VuZGluZywgY2FuIGdpdmUgdXMgYSByZXN1bHQgdGhhdCBpcyBub3QgYSBzdWItcmVjdCBv
ZiBjb250ZW50UmVjdCwgYnV0IG91cgotICAgIC8vIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYSBz
dWItcmVjdC4KKyAgICAvLyBUaGUgcmVjdCBiYWNrIGluIGNvbnRlbnQgc3BhY2UgaXMgYSBib3Vu
ZGluZyBib3ggYW5kIG1heSBleHRlbmQgb3V0c2lkZSBvZiB0aGUgb3JpZ2luYWwgY29udGVudFJl
Y3QsIHNvIGNsYW1wIGl0IHRvIHRoZSBjb250ZW50UmVjdEJvdW5kcy4KICAgICByZXR1cm4gaW50
ZXJzZWN0aW9uKHVub2NjbHVkZWRSZWN0LCBjb250ZW50UmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBJbnRSZWN0IEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2Nj
bHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKICAg
ICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBjb250ZW50UmVjdDsKIApA
QCAtMjgxLDMxICsyODAsMjQgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udGVudFIKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjb250ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVlblNwYWNl
VHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNv
bnRlbnRUb1RhcmdldFN1cmZhY2UgPSBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtPExh
eWVyVHlwZT4obGF5ZXIpOwogCi0gICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5TY3JlZW4gPSBjb21w
dXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFj
ZSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pOwotICAgIEludFJlY3QgdW5vY2Ns
dWRlZEluVGFyZ2V0ID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChjb250ZW50UmVjdCwg
Y29udGVudFRvVGFyZ2V0U3VyZmFjZSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQp
OworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29tcHV0ZVVub2NjbHVkZWRDb250
ZW50UmVjdChjb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2UsIG1fc2Npc3NvclJlY3RJ
blNjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7CisgICAgaWYg
KHVub2NjbHVkZWRJblNjcmVlbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7
CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBsYXllclNjaXNzb3JS
ZWN0KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQpOwogCiAgICAgcmV0
dXJuIGludGVyc2VjdGlvbih1bm9jY2x1ZGVkSW5TY3JlZW4sIHVub2NjbHVkZWRJblRhcmdldCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGU+Ci1JbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJT
dXJmYWNlVHlwZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBl
KiBsYXllciwgY29uc3QgSW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdAorSW50UmVj
dCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojps
YXllclNjaXNzb3JSZWN0KGNvbnN0IExheWVyVHlwZSogbGF5ZXIpIGNvbnN0CiB7Ci0gICAgLy8g
QSBzdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwg
c28gd2UgbmVlZCB0byB1c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3Rh
Y2suCi0gICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIHN1cmZhY2VD
b250ZW50UmVjdDsKLQotICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKLSAgICBB
U1NFUlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsK
LQotICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgcmVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUg
dmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVudFJlY3R8IGluIGJvdGggc2NyZWVuIHNwYWNlIGFuZCBp
biB0aGUgdGFyZ2V0IHN1cmZhY2UuCi0gICAgLy8gU28gd2UgZmluZCB0aGUgdmlzaWJsZSBwYXJ0
cyBvZiB8Y29udGVudFJlY3R8IGluIGVhY2ggc3BhY2UsIGFuZCB0YWtlIHRoZSBpbnRlcnNlY3Rp
b24uCi0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9TY3JlZW5TcGFjZSA9IGNv
bnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpOwotCi0gICAgY29u
c3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3RhY2suc2l6ZSgpLTJdOwot
ICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50
UmVjdChzdXJmYWNlQ29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlLCBzZWNvbmRMYXN0
Lm9jY2x1c2lvbkluU2NyZWVuKTsKLQotICAgIHJldHVybiB1bm9jY2x1ZGVkSW5TY3JlZW47Cisg
ICAgY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdldFN1cmZhY2UgPSBtX3N0YWNrLmxhc3Qo
KS5zdXJmYWNlOworICAgIEZsb2F0UmVjdCB0b3RhbFNjaXNzb3IgPSB0YXJnZXRTdXJmYWNlLT5j
b250ZW50UmVjdCgpOworICAgIGlmIChtX3N1cmZhY2VEYW1hZ2VDbGllbnQpCisgICAgICAgIHRv
dGFsU2Npc3Nvci5pbnRlcnNlY3QobV9zdXJmYWNlRGFtYWdlQ2xpZW50LT5kYW1hZ2VSZWN0KHRh
cmdldFN1cmZhY2UpKTsKKyAgICBpZiAoIWxheWVyLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgdG90YWxTY2lzc29yLmludGVyc2VjdChsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QodG90YWxTY2lzc29yKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KQEAgLTMyNCwyNyArMzE2
LDI5IEBAIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlPjo6Y3VycmVudE9jY2x1CiAKIAogLy8gRGVjbGFyZSB0aGUgcG9zc2li
bGUgZnVuY3Rpb25zIGhlcmUgZm9yIHRoZSBsaW5rZXIuCit0ZW1wbGF0ZSBDQ09jY2x1c2lvblRy
YWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OkNDT2NjbHVz
aW9uVHJhY2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpOwordGVtcGxh
dGUgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+OjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNjcmVl
blNwYWNlLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnQqIHN1cmZhY2VEYW1h
Z2VDbGllbnQpOwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hy
b21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShj
b25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
Pjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IExheWVyQ2hyb21pdW0qIG93bmlu
Z0xheWVyLCBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGZpbmlzaGVkVGFyZ2V0KTsKIHRl
bXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJh
Y2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bWFya09jY2x1
ZGVkQmVoaW5kTGF5ZXIoY29uc3QgTGF5ZXJDaHJvbWl1bSopOwogdGVtcGxhdGUgYm9vbCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46
Om9jY2x1ZGVkKGNvbnN0IExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkgY29uc3Q7Ci10ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJv
bWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6c3VyZmFjZU9jY2x1ZGVkKGNvbnN0IExheWVy
Q2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwogdGVt
cGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllckNocm9t
aXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwotdGVtcGxhdGUgSW50UmVj
dCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJv
bWl1bT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSos
IGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBjb25z
dCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtPjo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdDsKIHRl
bXBsYXRlIGNvbnN0IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNl
KCkgY29uc3Q7Cit0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bGF5ZXJTY2lzc29yUmVjdChjb25zdCBM
YXllckNocm9taXVtKikgY29uc3Q7CiAKK3RlbXBsYXRlIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OkNDT2NjbHVzaW9uVHJhY2tlckJhc2UoSW50
UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpOwordGVtcGxhdGUgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6Q0NPY2NsdXNpb25UcmFja2Vy
QmFzZShJbnRSZWN0IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSwgY29uc3QgQ0NPY2NsdXNpb25U
cmFja2VyRGFtYWdlQ2xpZW50SW1wbCogc3VyZmFjZURhbWFnZUNsaWVudCk7CiB0ZW1wbGF0ZSB2
b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46
OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1Rhcmdl
dCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIEND
UmVuZGVyU3VyZmFjZT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xheWVy
SW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0IENDUmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJnZXQp
OwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1Jl
bmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1
cmZhY2UqIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNv
bnN0IENDTGF5ZXJJbXBsKik7CiB0ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46Om9jY2x1ZGVkKGNvbnN0IENDTGF5ZXJJbXBs
KiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwotdGVtcGxhdGUgYm9vbCBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpzdXJmYWNl
T2NjbHVkZWQoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVu
dFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPEND
TGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3Qg
Q0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci10ZW1wbGF0
ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3Vy
ZmFjZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwqLCBj
b25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgY29uc3Qg
UmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZh
Y2U+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogdGVtcGxhdGUgY29u
c3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1
cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0ZW1wbGF0
ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3Vy
ZmFjZT46OmxheWVyU2Npc3NvclJlY3QoY29uc3QgQ0NMYXllckltcGwqKSBjb25zdDsKIAogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCmlu
ZGV4IGQxYzgzM2UxYTliYTRlZWRlOWFiZGY0MzAyMWU3ZWQ3YjRjNGZmMTYuLmJkYjhjNzZlMDRh
MzRmNGZjYTVhMDNlZWVhNzY4YjkwM2NlZGYxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9u
VHJhY2tlci5oCkBAIC0zNiw2ICszNiwxNSBAQCBjbGFzcyBDQ1JlbmRlclN1cmZhY2U7CiBjbGFz
cyBMYXllckNocm9taXVtOwogY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOwogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK2NsYXNzIENDT2NjbHVzaW9uVHJhY2tlckRh
bWFnZUNsaWVudEJhc2UgeworcHVibGljOgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRhbWFnZVJl
Y3QoY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqKSBjb25zdCA9IDA7Cit9OworCit0eXBlZGVmIEND
T2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEJhc2U8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBD
Q09jY2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnQ7Cit0eXBlZGVmIENDT2NjbHVzaW9uVHJhY2tl
ckRhbWFnZUNsaWVudEJhc2U8Q0NSZW5kZXJTdXJmYWNlPiBDQ09jY2x1c2lvblRyYWNrZXJEYW1h
Z2VDbGllbnRJbXBsOworCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdHJhY2sgb2NjbHVzaW9u
IG9mIGxheWVycyB3aGlsZSB0cmF2ZXJzaW5nIHRoZW0gaW4gYSBmcm9udC10by1iYWNrIG9yZGVy
LiBBcyBlYWNoIGxheWVyIGlzIHZpc2l0ZWQsIG9uZSBvZiB0aGUKIC8vIG1ldGhvZHMgaW4gdGhp
cyBjbGFzcyBpcyBjYWxsZWQgdG8gbm90aWZ5IGl0IGFib3V0IHRoZSBjdXJyZW50IHRhcmdldCBz
dXJmYWNlLgogLy8gVGhlbiwgb2NjbHVzaW9uIGluIHRoZSBjb250ZW50IHNwYWNlIG9mIHRoZSBj
dXJyZW50IGxheWVyIG1heSBiZSBxdWVyaWVkLCB2aWEgbWV0aG9kcyBzdWNoIGFzIG9jY2x1ZGVk
KCkgYW5kIHVub2NjbHVkZWRDb250ZW50UmVjdCgpLgpAQCAtNDMsOCArNTIsMTEgQEAgY2xhc3Mg
UmVuZGVyU3VyZmFjZUNocm9taXVtOwogLy8gRmluYWxseSwgb25jZSBmaW5pc2hlZCB3aXRoIHRo
ZSBsYXllciwgb2NjbHVzaW9uIGJlaGluZCB0aGUgbGF5ZXIgc2hvdWxkIGJlIG1hcmtlZCBieSBj
YWxsaW5nIG1hcmtPY2NsdWRlZEJlaGluZExheWVyKCkuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogY2xhc3MgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZSk7CisgICAgdHlwZWRlZiBDQ09jY2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnRCYXNlPFJlbmRl
clN1cmZhY2VUeXBlPiBEYW1hZ2VDbGllbnRUeXBlOwogcHVibGljOgotICAgIENDT2NjbHVzaW9u
VHJhY2tlckJhc2UoKSB7IH0KKyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlKEludFJlY3Qgc2Np
c3NvclJlY3RJblNjcmVlblNwYWNlKTsKKyAgICBDQ09jY2x1c2lvblRyYWNrZXJCYXNlKEludFJl
Y3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBjb25zdCBEYW1hZ2VDbGllbnRUeXBlKik7CiAK
ICAgICAvLyBDYWxsZWQgd2hlbiB2aXNpdGluZyBhIGxheWVyIHJlcHJlc2VudGluZyBpdHNlbGYu
IElmIHRoZSB0YXJnZXQgd2FzIG5vdCBhbHJlYWR5IGN1cnJlbnQsIHRoZW4gdGhpcyBpbmRpY2F0
ZXMgd2UgaGF2ZSBlbnRlcmVkIGEgbmV3IHN1cmZhY2Ugc3VidHJlZS4KICAgICB2b2lkIGVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogbmV3VGFyZ2V0KTsK
QEAgLTY1LDExICs3Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBHaXZlcyBhbiB1bm9jY2x1ZGVkIHN1
Yi1yZWN0IG9mIHxjb250ZW50UmVjdHwgaW4gdGhlIGNvbnRlbnQgc3BhY2Ugb2YgdGhlIGxheWVy
LiBVc2VkIHdoZW4gY29uc2lkZXJpbmcgb2NjbHVzaW9uIGZvciBhIGxheWVyIHRoYXQgcGFpbnRz
L2RyYXdzIHNvbWV0aGluZy4KICAgICBJbnRSZWN0IHVub2NjbHVkZWRDb250ZW50UmVjdChjb25z
dCBMYXllclR5cGUqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CiAKLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlY3QgaW4gY29udGVudCBzcGFjZSBmb3IgdGhl
IFJlbmRlclN1cmZhY2Ugb3duZWQgYnkgdGhlIGxheWVyIGlzIGZ1bGx5IG9jY2x1ZGVkIGluIGVp
dGhlciBzY3JlZW4gc3BhY2Ugb3IgdGhlIGxheWVyJ3MgdGFyZ2V0IHN1cmZhY2UuCi0gICAgYm9v
bCBzdXJmYWNlT2NjbHVkZWQoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpIGNvbnN0OwotICAgIC8vIEdpdmVzIGFuIHVub2NjbHVkZWQgc3ViLXJlY3Qgb2YgfGNv
bnRlbnRSZWN0fCBpbiB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUgUmVuZGVyU3VyZmFjZSBvd25l
ZCBieSB0aGUgbGF5ZXIuIFVzZWQgd2hlbiBjb25zaWRlcmluZyBvY2NsdXNpb24gZm9yIGEgdGFy
Z2V0IHN1cmZhY2UuCi0gICAgSW50UmVjdCBzdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNv
bnN0IExheWVyVHlwZSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKLQogICAg
IC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgaW4gZnV0dXJlLCB0aGV5IGFyZSB0byBtYWtlIENMcyBm
b3IgdHJhbnNpdGlvbmluZyB0byB0aGlzIGVhc2llci4KICAgICBjb25zdCBSZWdpb24mIGN1cnJl
bnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3Q7CiAgICAgY29uc3QgUmVnaW9uJiBjdXJy
ZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7CkBAIC05MCw4ICs5NywxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lvbiBhdCB0aGUgdG9wIG9mIHRo
ZSBzdGFjayB3aXRoIHRoZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBUaGlzIG5ldyB0YXJnZXQgaXMg
cHVzaGVkIG9udG8gdGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlLgogICAgIFZlY3RvcjxT
dGFja09iamVjdCwgMT4gbV9zdGFjazsKIAorICAgIC8vIEFsbG93IHRlc3RzIHRvIG92ZXJyaWRl
IHRoaXMuCisgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyU2Npc3NvclJlY3QoY29uc3QgTGF5ZXJU
eXBlKikgY29uc3Q7CisKIHByaXZhdGU6Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZSk7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFj
ZTsKKyAgICBjb25zdCBEYW1hZ2VDbGllbnRUeXBlKiBtX3N1cmZhY2VEYW1hZ2VDbGllbnQ7CiB9
OwogCiB0eXBlZGVmIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtPiBDQ09jY2x1c2lvblRyYWNrZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRleCA2
NzhlYzk2NDUyYjBiYWVkNjg3YWVmNjY2NjJkZjNkOGQ1MTA1ZGE4Li5iZGVkNzI0ZDJjYjFjMzY0
ZTNiMTgyY2RjZmU5ZTQ3ZmU4YzU3YWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTY4LDE3ICs2OCw1
MSBAQCBwdWJsaWM6CiAvLyBBIHN1YmNsYXNzIHRvIGV4cG9zZSB0aGUgdG90YWwgY3VycmVudCBv
Y2NsdXNpb24uCiBjbGFzcyBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIDogcHVibGljIENDT2NjbHVz
aW9uVHJhY2tlciB7CiBwdWJsaWM6CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0
IHNjcmVlblNjaXNzb3JSZWN0KQorICAgICAgICA6IENDT2NjbHVzaW9uVHJhY2tlcihzY3JlZW5T
Y2lzc29yUmVjdCkKKyAgICAgICAgLCBtX292ZXJyaWRlTGF5ZXJTY2lzc29yUmVjdChmYWxzZSkK
KyAgICB7CisgICAgfQorCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0IHNjcmVl
blNjaXNzb3JSZWN0LCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnQqIGRhbWFn
ZUNsaWVudCkKKyAgICAgICAgOiBDQ09jY2x1c2lvblRyYWNrZXIoc2NyZWVuU2Npc3NvclJlY3Qs
IGRhbWFnZUNsaWVudCkKKyAgICAgICAgLCBtX292ZXJyaWRlTGF5ZXJTY2lzc29yUmVjdChmYWxz
ZSkKKyAgICB7CisgICAgfQorCiAgICAgUmVnaW9uIG9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBj
b25zdCB7IHJldHVybiBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lv
bkluU2NyZWVuOyB9CiAgICAgUmVnaW9uIG9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIENDT2NjbHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5U
YXJnZXQ7IH0KIAogICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5TY3JlZW5TcGFjZShjb25zdCBSZWdp
b24mIHJlZ2lvbikgeyBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lv
bkluU2NyZWVuID0gcmVnaW9uOyB9CiAgICAgdm9pZCBzZXRPY2NsdXNpb25JblRhcmdldFN1cmZh
Y2UoY29uc3QgUmVnaW9uJiByZWdpb24pIHsgQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxh
c3QoKS5vY2NsdXNpb25JblRhcmdldCA9IHJlZ2lvbjsgfQorCisgICAgdm9pZCBzZXRMYXllclNj
aXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9vdmVycmlkZUxheWVyU2Npc3NvclJl
Y3QgPSB0cnVlOyBtX2xheWVyU2Npc3NvclJlY3QgPSByZWN0O30KKyAgICB2b2lkIHJlc2V0TGF5
ZXJTY2lzc29yUmVjdCgpIHsgbV9vdmVycmlkZUxheWVyU2Npc3NvclJlY3QgPSBmYWxzZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyU2Npc3NvclJlY3QoY29uc3Qg
TGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVMYXllclNjaXNz
b3JSZWN0ID8gbV9sYXllclNjaXNzb3JSZWN0IDogQ0NPY2NsdXNpb25UcmFja2VyOjpsYXllclNj
aXNzb3JSZWN0KGxheWVyKTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9vdmVycmlkZUxheWVy
U2Npc3NvclJlY3Q7CisgICAgSW50UmVjdCBtX2xheWVyU2Npc3NvclJlY3Q7Cit9OworCitjbGFz
cyBUZXN0RGFtYWdlQ2xpZW50IDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVu
dCB7CitwdWJsaWM6CisgICAgLy8gVGhlIGludGVyZmFjZQorICAgIHZpcnR1YWwgRmxvYXRSZWN0
IGRhbWFnZVJlY3QoY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKikgY29uc3QgeyByZXR1cm4g
bV9kYW1hZ2VSZWN0OyB9CisKKyAgICAvLyBUZXN0aW5nIHN0dWZmCisgICAgVGVzdERhbWFnZUNs
aWVudChjb25zdCBGbG9hdFJlY3QmIGRhbWFnZVJlY3QpIDogbV9kYW1hZ2VSZWN0KGRhbWFnZVJl
Y3QpIHsgfQorICAgIHZvaWQgc2V0RGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGRhbWFnZVJl
Y3QpIHsgbV9kYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsgfQorCitwcml2YXRlOgorICAgIEZsb2F0
UmVjdCBtX2RhbWFnZVJlY3Q7CiB9OwogCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxh
eWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUg
cmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKQEAgLTk4LDYgKzEzMiw5IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAg
ICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDAp
KTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXll
ci5nZXQoKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3MCksIG9j
Y2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwpAQCAtMTExLDYgKzE0
OCwxNCBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVk
UmVnaW9uKQogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDMxLCAzMCwgNzAsIDcwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkpOwogCisgICAg
b2NjbHVzaW9uLnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzApKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCAzMSwgNzAsIDcwKSkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0
KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwg
NzApKS5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDMwLCAxLCA3
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDI5LCAzMCwgNzAsIDcwKSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDI5LCA3
MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgyOSwgMjksIDcwLCA3MCkpKTsKQEAgLTEyNSw3ICsxNzAsNiBAQCBURVNUKENDT2NjbHVz
aW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQogVEVTVChDQ09jY2x1
c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikK
IHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5n
IHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CkBAIC0xNTAsNiArMTk0LDkgQEAg
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldp
dGhSb3RhdGlvbikKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5z
ZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAgICAgb2Nj
bHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7
CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9uLm9jY2x1
c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CkBAIC0xNjMsNiArMjEwLDE0IEBAIFRFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90
YXRpb24pCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7CiAKKyAgICBv
Y2NsdXNpb24ucmVzZXRMYXllclNjaXNzb3JSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgy
OSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNzAsIDcwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDMxLCA3MCwgNzApKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCkpLmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzAsIDEsIDcw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MjksIDMwLCA3MCwgNzApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMjksIDcw
LCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDI5LCAyOSwgNzAsIDcwKSkpOwpAQCAtMTc3LDcgKzIzMiw2IEBAIFRFU1QoQ0NPY2NsdXNp
b25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRpb24pCiBU
RVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0
aFRyYW5zbGF0aW9uKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNm
b3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lv
bjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKQEAgLTIw
MCw2ICsyNTQsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09j
Y2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgVGVz
dENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7
CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAx
MDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIo
bGF5ZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCA1MCwgNTAp
LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKQEAgLTIxMyw2
ICsyNzAsMTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2Ns
dWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNTAsIDUwLCA1MCkpKTsKICAgICBFWFBF
Q1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEs
IDUwLCA1MCkpKTsKIAorICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUw
LCA1MCwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA1MCwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9GQUxTRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAsIDUwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoNTEsIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkpKTsKKyAgICBvY2NsdXNpb24u
c2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDUwLCA1MCwgNTAsIDUwKSkuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDQ5LCA1MCwgMSwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNTAsIDUwLCA1MCkpKTsKICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDQ5LCA1MCwgNTApKSk7CkBAIC0yMjIsMTIgKzI4
NywyMyBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVk
UmVnaW9uV2l0aFRyYW5zbGF0aW9uKQogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTEsIDUx
LCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCg1MSwgNTEsIDUwLCA1MCkpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUw
LCAxMDAsIDUwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoNTAsIDUxLCA1MCwgNTApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCg0OSwgNTEsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50
LmdldCgpLCBJbnRSZWN0KDQ5LCA1MSwgNTAsIDUwKSkpOworCisgICAgb2NjbHVzaW9uLnJlc2V0
TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSkuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MCwgMSwgNTApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNTAsIDUw
LCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDQ5
LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNDksIDUwLCAxKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAs
IDQ5LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MSwgNDksIDQ5LCAx
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
NTEsIDQ5LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCg1MCwgNTEsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCg0OSwgNTEsIDEsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoNDksIDUxLCA1MCwgNTApKSk7CisgICAgb2NjbHVzaW9uLnNldExh
eWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CiB9CiAKIFRFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRl
ZFN1cmZhY2UpCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1z
IGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwog
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAg
LTI1Nyw2ICszMzMsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRU
b09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQogCiAgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisg
ICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAx
MDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihsYXllci5nZXQoKSk7CiAKQEAgLTI3MSw2ICszNTAsMTQgQEAgVEVTVChDQ09jY2x1c2lv
blRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFj
ZSkKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYxLCA3MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1
ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MSkpKTsKIAorICAgIG9jY2x1
c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAs
IDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTAsIDQyOSwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MSwgNzApKSk7CisgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0
MzAsIDYwLCA3MSkpKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0
KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRM
YXllcihjaGlsZC5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjaGlsZC5nZXQoKSwgY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9u
LmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAg
LTI4Myw2ICszNzAsMTYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVk
VG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKICAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkpOwog
ICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0
KDI5LCA0MCwgNzAsIDYwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9GQUxT
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCA0MCwgNzAsIDYw
KSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOworCisgICAgb2NjbHVzaW9uLnJlc2V0TGF5ZXJTY2lz
c29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0
KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lv
bi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7CisgICAg
RVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAs
IDM5LCA3MCwgNjApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgzMSwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOwor
ICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAw
MCkpOwogCiAKICAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZy
b20gfGxheWVyfDoKQEAgLTMxNCw3ICs0MTEsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQogVEVTVChD
Q09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhTdXJm
YWNlQWxyZWFkeU9uU3RhY2spCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0
cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2Nj
bHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owog
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKQEAgLTM1MCw2ICs0NDYsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxh
eWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFN1cmZhY2VBbHJlYWR5T25TdGFjawogCiAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVj
dCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3Qo
SW50UmVjdCgtMTAsIC0xMCwgMTAwMCwgMTAwMCkpOworCiAgICAgb2NjbHVzaW9uLmVudGVyVGFy
Z2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9u
Lm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7CiAKQEAgLTM3Miw2ICs0NzEs
MTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJl
Z2lvbldpdGhTdXJmYWNlQWxyZWFkeU9uU3RhY2sKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9u
Lm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsKICAgICBF
WFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0
MzEsIDYwLCA3MCkpKTsKIAorICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3Qo
MTAsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChj
aGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwgNjAsIDcwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVj
dCgxMSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpKTsKKyAgICBvY2NsdXNpb24u
c2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0xMCwgLTEwLCAxMDAwLCAxMDAwKSk7CisKICAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgp
LCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7CiAgICAgLy8gVGhpcyBpcyB0
aGUgbGl0dGxlIHBpZWNlIG5vdCBvY2NsdWRlZCBieSBjaGlsZDIKICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDksIDQzMCwgMSwgMTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkpOwpAQCAtMzg3LDggKzQ5NCwx
NiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVn
aW9uV2l0aFN1cmZhY2VBbHJlYWR5T25TdGFjawogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
NzAsIDQzMCwgMSwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdl
dCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDEwLCA1MDAsIDYwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGls
ZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzApKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlz
IG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgotICAgIEVYUEVD
VF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9j
Y2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkp
OworICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEw
LCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkp
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA4MCkpLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQo
KSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KC0x
MCwgNDMwLCA2MCwgODApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwgNjAsIDcw
KSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzApKS5pc0VtcHR5KCkpOworICAgIG9jY2x1c2lv
bi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOwogCiAgICAg
b2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKICAgICAvLyB8
Y2hpbGQyfCBzaG91bGQgZ2V0IG1lcmdlZCB3aXRoIHRoZSBzdXJmYWNlIHdlIGFyZSBsZWF2aW5n
IG5vdwpAQCAtNDMzLDEwICs1NDgsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxh
eWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFN1cmZhY2VBbHJlYWR5T25TdGFjawogICAgIEVY
UEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCA0MCwgMSwgNjApLCBvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgNDAsIDcwLCA2MCkpKTsKICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAxKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQxLCA3MCwgNjApKSk7
CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGlu
dG8gaXRzZWxmLgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwgNjApLCBv
Y2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDQwLCA3MCwgNjApKSk7Ci0KLQogICAgIC8qIEp1c3RpZmljYXRpb24gZm9yIHRoZSBh
Ym92ZSBvY2NsdXNpb24gZnJvbSB8bGF5ZXJ8OgogICAgICAgICAgICAgICAgMTAwCiAgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTQ2NSw3ICs1NzYsNiBAQCBURVNUKENDT2Nj
bHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFN1cmZhY2VB
bHJlYWR5T25TdGFjawogCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRU
b09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRPZmZBeGlzU3VyZmFjZSkKIHsKLSAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC01MDEsNiArNjExLDkgQEAgVEVTVChDQ09jY2x1
c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkT2Zm
QXhpc1N1cmZhY2UKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5z
ZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAgICAgSW50
UmVjdCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5ZXJUcmFuc2Zvcm0ubWFwUmVjdChsYXllci0+
dmlzaWJsZUxheWVyUmVjdCgpKTsKIAogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1
cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC01MzAsOSArNjQzLDYgQEAgVEVTVChD
Q09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3Rh
dGVkT2ZmQXhpc1N1cmZhY2UKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1wdHkoKSk7
CiAgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIC0xKTsKIAotICAgIC8vIFN1cmZhY2Ug
aXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA1MDAsIDUwMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDAsIDAsIDUwMCwgNTAwKSkp
OwotCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsK
ICAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgpLCBj
aGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRl
clN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtNTQ0LDE1ICs2NTQsMTEgQEAg
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldp
dGhSb3RhdGVkT2ZmQXhpc1N1cmZhY2UKIAogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDc1LCA1NSwgMSwgMSkpKTsKICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDc1LCA1NSwgMSwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDc1LCA1NSwgMSwgMSkpKTsKLQotICAgIC8vIFN1
cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0g
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIG9jY2x1c2lvbi5zdXJm
YWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCkpKTsKIH0KIAogVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9P
Y2NsdWRlZFJlZ2lvbldpdGhNdWx0aXBsZU9wYXF1ZUxheWVycykKIHsKICAgICAvLyBUaGlzIGlz
IHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIHRlc3QgYnV0IG5vdyB3ZSBtYWtlIGEgZmV3IG9wYXF1
ZSBsYXllcnMgaW5zaWRlIG9mIHxjaGlsZHwgc28gdGhhdCB0aGUgb2NjbHVkZWQgcGFydHMgb2Yg
Y2hpbGQgYXJlIG5vdCBhIHNpbXBsZSByZWN0LgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIg
b2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKQEAgLTU4NSw2ICs2OTEsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3Qs
IGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aE11bHRpcGxlT3BhcXVlTGF5ZXJzKQogCiAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJl
Y3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJn
ZXRSZW5kZXJTdXJmYWNlKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5t
YXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOwogICAgIG9jY2x1c2lvbi5tYXJr
T2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjEuZ2V0KCkpOwpAQCAtNjA2LDkgKzcxNSw2IEBAIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRo
TXVsdGlwbGVPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3MCwgNDMw
LCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIElu
dFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAs
IDUwMCwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgp
LCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9j
Y2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRD
b250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7Ci0KICAg
ICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOwogICAgIG9j
Y2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0KCksIGNoaWxkLT5y
ZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFj
ZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC02MjgsMTAgKzczNCw2IEBAIFRFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVsdGlw
bGVPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDQwLCAxLCA2
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMxLCA0MCwgNzAsIDYwKSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDEwMCwg
NzAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMCwgNDEsIDcwLCA2MCkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVk
IGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKLQotCiAgICAgLyog
SnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbiBmcm9tIHxsYXllcjF8IGFuZCB8
bGF5ZXIyfDoKIAogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC02NjEsNyArNzYz
LDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJl
Z2lvbldpdGhNdWx0aXBsZU9wYXF1ZUxheWVycykKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNlcykKIHsKICAg
ICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQu
Ci0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTY5OCw2ICs3OTksOSBA
QCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3Zlcmxh
cHBpbmdTaWJsaW5nU3VyZmFjZXMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NPY2Ns
dXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBv
Y2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0xMCwgLTEwLCAxMDAwLCAxMDAw
KSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi0+cmVu
ZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5
ZXIyLmdldCgpKTsKIApAQCAtNzEyLDkgKzgxNiw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNlcykKICAg
ICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgw
LCA0MjAsIDYxLCA4MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNo
aWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYwLCA4MSkpKTsKIAotICAgIC8vIFN1cmZhY2Ug
aXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MjAsIDYwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYwLCA4MCkp
KTsKLQogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDIuZ2V0KCkp
OwogICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLmdldCgp
LCBjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRS
ZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTczMiw5ICs4MzMsNiBA
QCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3Zlcmxh
cHBpbmdTaWJsaW5nU3VyZmFjZXMpCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRl
ZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3MSwgNzApKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3MCwg
NzEpKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBk
cmF3IGludG8gaXRzZWxmLCBidXQgdGhlIHxjaGlsZDF8IHN1cmZhY2Ugc2hvdWxkIGJlIG9jY2x1
ZGVkIGJ5IHRoZSB8Y2hpbGQyfCBzdXJmYWNlLgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MCwgNDMwLCAxMCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChj
aGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3MCwgNzApKSk7Ci0KICAgICBvY2NsdXNpb24u
bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQxLmdldCgpKTsKICAgICBvY2NsdXNpb24uZmlu
aXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMS5nZXQoKSwgY2hpbGQxLT5yZW5kZXJTdXJm
YWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQt
PnJlbmRlclN1cmZhY2UoKSk7CkBAIC03NTQsMTAgKzg1Miw2IEBAIFRFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNl
cykKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgxOSwgNDAsIDgwLCA2MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzksIDgwLCA2MCkpKTsKIAotICAgIC8vIHxj
aGlsZDF8IGFuZCB8Y2hpbGQyfCBib3RoIGRyYXcgaW50byBwYXJlbnQgc28gdGhleSBzaG91bGQg
bm90IG9jY2x1ZGUgaXQuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAsIDgwLCA3
MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgyMCwgMzAsIDgwLCA3MCkpKTsKLQotCiAgICAgLyogSnVzdGlmaWNhdGlvbiBmb3Ig
dGhlIGFib3ZlIG9jY2x1c2lvbjoKICAgICAgICAgICAgICAgIDEwMAogICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKQEAgLTc4Nyw3ICs4ODEsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3ZlcmxhcHBpbmdTaWJsaW5nU3VyZmFjZXMpCiBU
RVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNl
KQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVp
bmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtODMxLDYg
KzkyNCw5IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbklu
U2NyZWVuU3BhY2UpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24u
c2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0yMCwgLTIwLCAxMDAwLCAxMDAwKSk7CisKICAg
ICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi0+cmVuZGVyU3VyZmFj
ZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIyLmdldCgp
KTsKIApAQCAtODQ1LDkgKzk0MSwxMyBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1
cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNlKQogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24u
b2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDIwLCA3MSwgODApKSk7CiAgICAg
RVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEw
LCA0MjAsIDcwLCA4MSkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRo
aW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgt
MTAsIDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
Y2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDIwLCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDMwLCAy
NTAsIDEsIDEpKSk7CisgICAgb2NjbHVzaW9uLnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEw
LCA0MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQyLmdldCgpLCBJbnRSZWN0KC0xMSwgNDIwLCA3MCwgODApKSk7CisgICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQxOSwgNzAsIDgw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIElu
dFJlY3QoLTEwLCA0MjAsIDcxLCA4MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDIwLCA3MCwgODEpKSk7CisgICAgb2Nj
bHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgtMjAsIC0yMCwgMTAwMCwgMTAwMCkp
OwogCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7
CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDIuZ2V0KCks
IGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTg2NiwxNCArOTY2LDYgQEAgVEVTVChDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFjZSkKICAgICBF
WFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgtMTAs
IDQzMCwgODEsIDcwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQxLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzEpKSk7CiAKLSAgICAvLyBTdXJmYWNl
IGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLCBidXQgdGhl
IHxjaGlsZDF8IHN1cmZhY2Ugc2hvdWxkIGJlIG9jY2x1ZGVkIGJ5IHRoZSB8Y2hpbGQyfCBzdXJm
YWNlLgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0MzAsIDEwLCA4MCksIG9jY2x1
c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQoKSwgSW50UmVjdCgt
MTAsIDQzMCwgNzAsIDgwKSkpOwotICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5zdXJmYWNlT2Nj
bHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzAsIDgwKSkpOwotICAgIEVYUEVD
VF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgt
MSwgNDMwLCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2Nj
bHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQyOSwgNzAsIDgwKSkpOwotICAgIEVYUEVD
VF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgx
LCA0MzAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2Ns
dWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMxLCA3MCwgODApKSk7Ci0KICAgICBvY2Ns
dXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQxLmdldCgpKTsKICAgICBvY2NsdXNp
b24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMS5nZXQoKSwgY2hpbGQxLT5yZW5k
ZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC04OTMsMTEgKzk4NSw2IEBAIFRFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCiAgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTksIDMw
LCA4MCwgNzApKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMjAsIDI5LCA4MCwgNzApKSk7CiAKLSAgICAvLyB8Y2hpbGQxfCBhbmQg
fGNoaWxkMnwgYm90aCBkcmF3IGludG8gcGFyZW50IHNvIHRoZXkgc2hvdWxkIG5vdCBvY2NsdWRl
IGl0LgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBvY2NsdXNp
b24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAs
IDIwLCA4MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MCwgMSwgMSkpKTsKLQotCiAgICAgLyogSnVz
dGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbjoKICAgICAgICAgICAgICAgIDEwMAog
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTkyNiw3ICsxMDEzLDYgQEAgVEVTVChD
Q09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFjZSkKIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2VE
aWZmZXJlbnRUcmFuc2Zvcm1zKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQg
dHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9j
Y2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwpAQCAtOTc1LDYgKzEwNjEsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3Qs
IHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykKIAogICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJl
Y3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0
KEludFJlY3QoLTMwLCAtMzAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRh
cmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lv
bi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOwogCkBAIC05ODksMTAgKzEw
NzgsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNj
cmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9u
Lm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzEsIDgwKSkpOwogICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0x
MCwgNDIwLCA3MCwgODEpKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0
aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
LTEwLCA0MjAsIDcwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0
KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOwotICAgIEVYUEVDVF9G
QUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgzMCwg
MjUwLCAxLCAxKSkpOwotCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNo
aWxkMi5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShj
aGlsZDIuZ2V0KCksIGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubGVh
dmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTAx
MCwxNiArMTA5NSw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1
c2lvbkluU2NyZWVuU3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogICAgIEVYUEVDVF9GQUxTRShv
Y2NsdXNpb24ub2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMCwgLTE5LCA4MCwgOTAp
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDEuZ2V0KCksIElu
dFJlY3QoNDIxLCAtMjAsIDgwLCA5MCkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1
ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxkMXwgc3Vy
ZmFjZSBzaG91bGQgYmUgb2NjbHVkZWQgYnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCi0gICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCg0MjAsIC0yMCwgODAsIDkwKSwgb2NjbHVzaW9uLnN1cmZhY2VV
bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMCwgLTIwLCA4MCwg
OTApKSk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0OTAsIC0xMCwgMTAsIDgwKSwgb2Nj
bHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0
KDQyMCwgLTEwLCA4MCwgODApKSk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MjAsIC0y
MCwgNzAsIDEwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQx
LmdldCgpLCBJbnRSZWN0KDQyMCwgLTIwLCA3MCwgOTApKSk7Ci0gICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoNDIwLCAtMTAsIDcw
LCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGls
ZDEuZ2V0KCksIEludFJlY3QoNDE5LCAtMTAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
b2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoNDIwLCAtMTEs
IDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChj
aGlsZDEuZ2V0KCksIEludFJlY3QoNDIxLCAtMTAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoNDIwLCAt
OSwgNzAsIDgwKSkpOwotCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNo
aWxkMS5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShj
aGlsZDEuZ2V0KCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubGVh
dmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMTAz
NSwxNCArMTExMCw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1
c2lvbkluU2NyZWVuU3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogICAgIEVYUEVDVF9GQUxTRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDExLCAyMCwgOTAsIDgwKSkp
OwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDEwLCAyMSwgOTAsIDgwKSkpOwogCi0gICAgLy8gfGNoaWxkMXwgYW5kIHxjaGlsZDJ8IGJv
dGggZHJhdyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4KLSAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAyMCwgOTAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VV
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwLCAyMCwgOTAsIDgw
KSkpOwotICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgxMCwgMjAsIDEsIDEpKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lv
bi5zdXJmYWNlT2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDk5LCAyMCwgMSwgMSkpKTsK
LSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMTAsIDksIDEsIDEpKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJm
YWNlT2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDk5LCA5OSwgMSwgMSkpKTsKLQotCiAg
ICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbjoKICAgICAgICAgICAg
ICAgIDEwMAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEwNzEsNyArMTEzOCw2
IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVu
U3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBv
Y2NsdXNpb25JbnRlcmFjdGlvbldpdGhGaWx0ZXJzKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhh
dCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNp
b25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBibHVyTGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CkBAIC0xMTIxLDYgKzExODcsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJh
Y2tlclRlc3QsIG9jY2x1c2lvbkludGVyYWN0aW9uV2l0aEZpbHRlcnMpCiAKICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJl
bnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CiAKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAs
IDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0
KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIC8vIE9wYWNpdHkgbGF5ZXIgd29uJ3QgY29udHJp
YnV0ZSB0byBvY2NsdXNpb24uCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFj
ZShvcGFjaXR5TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2Ns
dWRlZEJlaGluZExheWVyKG9wYWNpdHlMYXllci5nZXQoKSk7CkBAIC0xMTcwLDQgKzEyMzksNzc4
IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgb2NjbHVzaW9uSW50ZXJhY3Rpb25XaXRo
RmlsdGVycykKICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRhcmdldFN1
cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CiB9CiAKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgbGF5ZXJTY2lzc29yUmVjdE92ZXJUaWxlKQoreworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRD
aGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVy
cy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50
TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVy
cyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMw
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJ
bnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29y
UmVjdChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpOworCisgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCks
IEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAx
MDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5
ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9u
LnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgb2Nj
bHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKTsK
KworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7Cisg
ICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgw
LCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAx
MDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAs
IDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJl
bnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDIw
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1
c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7
CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMw
MCwgMzAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNz
b3JSZWN0T3ZlclRpbGUpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJl
bnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsK
KworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMo
KS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAu
NSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0Rmls
dGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhw
YXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0
Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMjAwLCAx
MDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNl
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEw
MCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQo
KSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisK
KyAgICAvLyBPY2NsdWRlZCBzaW5jZSBpdHMgb3V0c2lkZSB0aGUgc3VyZmFjZSBib3VuZHMuCisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDIw
MCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIC8vIFRlc3Qgd2l0aG91dCBhbnkgc2Npc3NvcnMu
CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAx
MDAwKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwg
SW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgb2NjbHVzaW9uLnJlc2V0TGF5ZXJT
Y2lzc29yUmVjdCgpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdl
dCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgp
LCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lv
bi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgp
LCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJ
bnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSkp
OworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDEw
MCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgbGF5ZXJTY2lzc29yUmVjdE92ZXJDdWxsZWRUaWxlKQoreworICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50
LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAg
ZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAg
cGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMo
ZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgz
MDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVy
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1
c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJT
Y2lzc29yUmVjdChJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpOworCisgICAgb2NjbHVzaW9u
LmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIu
Z2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0
KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhp
bmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJT
dXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJn
ZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAs
IDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJl
bnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRM
YXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMTAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50
TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMjAwLCAx
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5
ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDIwMCwg
MTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2Uo
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDAp
KS5pc0VtcHR5KCkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNj
aXNzb3JSZWN0T3ZlckN1bGxlZFRpbGUpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxk
KGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXll
ci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsK
KworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJl
Y3QoMTAwLCAxMDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5k
ZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgw
LCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChs
YXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxT
RShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwg
MTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdl
dCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2Uo
cGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJ
bnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7Cit9
CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJTY2lzc29yUmVjdE92ZXJQYXJ0
aWFsVGlsZXMpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4g
cGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAg
IEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBl
bmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhm
aWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAw
LCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRM
YXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwor
CisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKwor
ICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwg
MTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoNTAsIDUw
LCAyMDAsIDIwMCkpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShs
YXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2Nj
bHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNU
X0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEw
MCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0
KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVz
aW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsK
KworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7Cisg
ICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgw
LCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAs
IDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgy
MDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEw
MCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAg
IG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAw
LCAzMDAsIDMwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgNTAsIDUwLCA1
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDAsIDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAs
IDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MjAwLCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVu
dC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKK30KKwor
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzY3JlZW5TY2lzc29yUmVjdE92ZXJQYXJ0aWFs
VGlsZXMpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFy
ZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBs
YXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgp
KTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENo
aWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZp
bHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQo
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVy
T3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0
ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAz
MDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXll
ci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgy
MDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJl
bmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisg
ICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoNTAsIDUwLCAyMDAsIDIw
MCkpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5
ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9j
Y2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkp
OworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJl
Y3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1
ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9j
Y2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVz
aW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEw
MCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXll
ci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAw
LCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXll
ci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDAsIDEw
MCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5
ZXIuZ2V0KCksIEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAx
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1c2lv
bi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2NsdXNpb24u
dW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMw
MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgNTAsIDUwLCA1MCksIG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMw
MCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDUwLCAxMDAp
LCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAs
IDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKK30KKworVEVTVChDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LCBsYXllclNjaXNzb3JSZWN0T3Zlck5vVGlsZXMpCit7CisgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVy
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMg
ZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXll
ci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUp
OworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0
OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1
c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoNTAwLCA1MDAsIDEwMCwgMTAwKSk7CisK
KyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgp
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5n
ZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFy
a09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRv
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQo
KSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIElu
dFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJl
Y3QoMjAwLCAyMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRS
ZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAs
IDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkp
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworfQorCitURVNUKENDT2NjbHVz
aW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNzb3JSZWN0T3Zlck5vVGlsZXMpCit7CisgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5l
dyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmls
dGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+
c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOwor
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owor
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uKEludFJlY3QoNTAwLCA1MDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2Ns
dXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwor
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChs
YXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50
UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVk
QmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVu
ZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAw
LCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAs
IDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDIw
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAy
MDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJm
YWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwg
MzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkpLmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAs
IDIwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIGxheWVyU2Npc3NvclJlY3RGb3JMYXllck9mZk9yaWdpbikKK3sKKyAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5l
dyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJz
OworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkp
OworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRG
aWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDEwMCwgMTAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOwor
CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0Owor
ICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAgb2NjbHVz
aW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKwor
ICAgIC8vIFRoaXMgbGF5ZXIgaXMgdHJhbnNsYXRlZCB3aGVuIGRyYXduIGludG8gaXRzIHRhcmdl
dC4gU28gaWYgdGhlIHNjaXNzb3IgcmVjdCBnaXZlbiBmcm9tIHRoZSB0YXJnZXQgc3VyZmFjZQor
ICAgIC8vIGlzIG5vdCBpbiB0aGF0IHRhcmdldCBzcGFjZSwgdGhlbiBhZnRlciB0cmFuc2xhdGlu
ZyB0aGVzZSBxdWVyeSByZWN0cyBpbnRvIHRoZSB0YXJnZXQsIHRoZXkgd2lsbCBmYWxsIG91dHNp
ZGUKKyAgICAvLyB0aGUgc2Npc3NvciBhbmQgYmUgY29uc2lkZXJlZCBvY2NsdWRlZC4KKyAgICBF
WFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIu
Z2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2Nj
bHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVj
dCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgZGFtYWdlUmVjdE92ZXJUaWxlKQoreworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Cisg
ICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChs
YXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVy
YXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXIt
PnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICBwYXJl
bnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisKKyAgICBUZXN0RGFtYWdlQ2xpZW50IGRhbWFnZShGbG9hdFJlY3QoMjAwLCAx
MDAsIDEwMCwgMTAwKSk7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSwgJmRhbWFnZSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJU
YXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwg
SW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEw
MCwgMTAwLCAxMDApKSk7CisKKyAgICAvLyBPdXRzaWRlIHRoZSBsYXllcidzIGNsaXAgcmVjdC4K
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3Qo
MjAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGlu
ZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdl
dFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDIwMCwgMTAw
LCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVy
LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAyMDAsIDEw
MCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAw
LCAxMDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgZGFtYWdlUmVjdE92ZXJDdWxsZWRUaWxlKQoreworICAgIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFy
ZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7Cisg
ICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7Cisg
ICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRl
cnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6
ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxh
eWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwg
MCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
LT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBh
cmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0RGFtYWdlQ2xpZW50IGRhbWFnZShG
bG9hdFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSk7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tl
ciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSwgJmRhbWFnZSk7CisKKyAgICBv
Y2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkp
OworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRl
ZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwg
MTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCks
IEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2Ns
dWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1Rhcmdl
dFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5l
bnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0
KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3Qo
MjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgw
LCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIw
MCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAz
MDAsIDMwMCkpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
ZGFtYWdlUmVjdE92ZXJQYXJ0aWFsVGlsZXMpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENo
aWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJz
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRM
YXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJz
KTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQo
MCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRl
bnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAg
IHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJv
dW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKKworICAgIFRlc3REYW1hZ2VDbGllbnQgZGFtYWdlKEZsb2F0UmVjdCg1
MCwgNTAsIDIwMCwgMjAwKSk7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24o
SW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSwgJmRhbWFnZSk7CisKKyAgICBvY2NsdXNpb24uZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdl
dCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1
c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3Qo
MTAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGlu
ZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdl
dFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwg
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMTAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZB
TFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50
TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9G
QUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAy
MDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJm
YWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoNTAsIDUwLCAyMDAsIDIwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMjAwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEw
MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDUwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAy
MDAsIDEwMCwgMTAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGRhbWFn
ZVJlY3RPdmVyTm9UaWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIp
OworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9u
cygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUo
MC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRG
aWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDAp
LCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5z
ZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworCisgICAgVGVzdERhbWFnZUNsaWVudCBkYW1hZ2UoRmxvYXRSZWN0KDUwMCwgNTAwLCAx
MDAsIDEwMCkpOworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3Qo
MCwgMCwgMTAwMCwgMTAwMCksICZkYW1hZ2UpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0
UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJl
Y3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVk
ZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEw
MCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVy
LmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgp
LCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJ
bnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwg
SW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsK
KworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDAsIDEwMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAx
MDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSku
aXNFbXB0eSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129986</attachid>
            <date>2012-03-02 18:40:18 -0800</date>
            <delta_ts>2012-03-06 17:36:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79927-20120302214016.patch</filename>
            <type>text/plain</type>
            <size>99447</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE0NTRiYjQ5NzYyMjZk
NTU4MTM1YWU1NDg4ZmFjZDFjNWJiNTUwMy4uMmFiMjE0ZmVlNWU5MWQyNTg5YTQ4Y2Y0MTZkN2Fi
OTg4YWZlOGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTAyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBsb2dpYyB0byBDQ09j
Y2x1c2lvblRyYWNrZXIgdG8gb2NjbHVkZSBhbnl0aGluZyBvdXRzaWRlIG9mIHRoZQorICAgICAg
ICBjdXJyZW50IHNjcmVlbiBhbmQgdGFyZ2V0IHN1cmZhY2Ugc2Npc3NvciByZWN0cy4gV2hlbiB0
cmFja2luZworICAgICAgICBkYW1hZ2UgZm9yIHBhcnRpYWwgc3dhcHMsIHRoZSBzY2lzc29yIHJl
Y3RzIGFyZSBib3VuZGVkIGJ5IHRoZQorICAgICAgICB0cmFja2VkIGRhbWFnZSByZWN0cy4KKwor
ICAgICAgICBVbml0IHRlc3RzOiBDQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6OjpvY2NsdWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6bGF5ZXJTY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEJhc2UpOgor
ICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VyQmFzZSk6CisKIDIwMTItMDMtMDIgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIG1l
ZGlhL21lZGlhLWNhbi1wbGF5LWZsYWMtYXVkaW8uaHRtbCBmYWlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBkZjFjMjVlZDQ5NjViN2IwYWVhOGMzOGUwODRhODhhYTgyZTg4MzA3Li5i
OTJiMmVhMWZkOWQ3MjdjNGNiNTU5NGYxMjE2M2ZjMWE2YWNiNzU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTAyICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGNsaXBwaW5nIHRv
IHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OlRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIpOgorICAgICAgICAoVGVzdENDT2NjbHVzaW9uVHJhY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRMYXllclNjaXNzb3JSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OnJlc2V0TGF5ZXJT
Y2lzc29yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjps
YXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGVzdERhbWFn
ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0RGFtYWdlQ2xpZW50OjpkYW1hZ2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REYW1hZ2VDbGllbnQ6OlRlc3REYW1hZ2VDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdERhbWFnZUNsaWVudDo6c2V0RGFtYWdlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wMy0wMSAgQ2FpbyBNYXJjZWxvIGRlIE9s
aXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIE1h
a2UgcGFyc2VyIGNvZGUgbm90IGRlcGVuZCBvbiBOYW1lZE5vZGVNYXAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJh
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q09jY2x1c2lvblRyYWNrZXIuY3BwCmluZGV4IGM1NjExYWMyN2E2YWVjNGE3ZmJkNjk0MDIzZDM0
M2Y1MmJhNWQyM2MuLjY1ODU0NTRmZmNiNzYwZWQ4ZDFmNWYzZDNhNDkyYzM3N2U0MzY4YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
T2NjbHVzaW9uVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcApAQCAtMzksNiArMzksMjAgQEAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDT2NjbHVzaW9u
VHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OkNDT2NjbHVzaW9uVHJh
Y2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpCisgICAgOiBtX3NjaXNz
b3JSZWN0SW5TY3JlZW5TcGFjZShzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpCisgICAgLCBtX3N1
cmZhY2VEYW1hZ2VDbGllbnQoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBl
LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK0NDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OkNDT2NjbHVzaW9uVHJhY2tlckJhc2UoSW50UmVj
dCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIGNvbnN0IERhbWFnZUNsaWVudFR5cGUqIHN1cmZh
Y2VEYW1hZ2VDbGllbnQpCisgICAgOiBtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZShzY2lzc29y
UmVjdEluU2NyZWVuU3BhY2UpCisgICAgLCBtX3N1cmZhY2VEYW1hZ2VDbGllbnQoc3VyZmFjZURh
bWFnZUNsaWVudCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFt
ZSBSZW5kZXJTdXJmYWNlVHlwZT4KIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5
cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJl
bmRlclN1cmZhY2VUeXBlKiBuZXdUYXJnZXQpCiB7CiAgICAgaWYgKCFtX3N0YWNrLmlzRW1wdHko
KSAmJiBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlID09IG5ld1RhcmdldCkKQEAgLTE5MSw2ICsyMDUs
OCBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheQogewogICAgIEFTU0VSVCghbV9zdGFjay5pc0Vt
cHR5KCkpOwogICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09IG1fc3Rh
Y2subGFzdCgpLnN1cmZhY2UpOworICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGxheWVyLT5kcmF3T3BhY2l0eSgpICE9IDEpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIwMiw0MSArMjE4LDI2IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5CiAgICAg
bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQudW5pdGUoY29tcHV0ZU9jY2x1c2lvbkJl
aGluZExheWVyPExheWVyVHlwZT4obGF5ZXIsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2UpKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNl
VHJhbnNmb3JtLCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCB0
ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3QgSW50UmVj
dCYgc2Npc3NvclJlY3QsIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQogewotICAgIEZsb2F0UXVh
ZCB0cmFuc2Zvcm1lZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1
YWQoY29udGVudFJlY3QpKTsKLSAgICByZXR1cm4gb2NjbHVzaW9uLmNvbnRhaW5zKHRyYW5zZm9y
bWVkUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3Jt
ZWRSZWN0ID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KGNvbnRlbnRS
ZWN0KSk7CisgICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCwgYXMgd2Ugd2FudCB0byBp
bmNsdWRlIHBhcnRpYWwgcGl4ZWxzIGluIHRoZSB0ZXN0LgorICAgIEludFJlY3QgdGFyZ2V0UmVj
dCA9IGludGVyc2VjdGlvbihlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUmVjdCksIHNjaXNz
b3JSZWN0KTsKKyAgICByZXR1cm4gdGFyZ2V0UmVjdC5pc0VtcHR5KCkgfHwgb2NjbHVzaW9uLmNv
bnRhaW5zKHRhcmdldFJlY3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogYm9vbCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpvY2NsdWRlZChjb25zdCBMYXllclR5cGUqIGxh
eWVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIW1f
c3RhY2suaXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID09
IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOwogCi0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1
ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFjZVRyYW5zZm9ybTxMYXllclR5cGU+
KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pKQorICAgIGlmICh0ZXN0
Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2VUcmFu
c2Zvcm08TGF5ZXJUeXBlPihsYXllciksIG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBtX3N0
YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmICh0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvVGFyZ2V0
U3VyZmFjZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zdGFjay5sYXN0KCkub2NjbHVz
aW9uSW5UYXJnZXQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Ci1ib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNl
VHlwZT46OnN1cmZhY2VPY2NsdWRlZChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRS
ZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0Ci17Ci0gICAgLy8gQSBzdXJmYWNlIGlzIG5v
dCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0byB1
c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2suCi0gICAgaWYgKG1f
c3RhY2suc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFjZSgp
ID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c3VyZmFjZUNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zv
cm08TGF5ZXJUeXBlPihsYXllcik7Ci0KLSAgICBjb25zdCBTdGFja09iamVjdCYgc2Vjb25kTGFz
dCA9IG1fc3RhY2tbbV9zdGFjay5zaXplKCktMl07Ci0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9j
Y2x1ZGVkKHN1cmZhY2VDb250ZW50UmVjdCwgc3VyZmFjZUNvbnRlbnRUb1NjcmVlblNwYWNlLCBz
ZWNvbmRMYXN0Lm9jY2x1c2lvbkluU2NyZWVuKSkKKyAgICBpZiAodGVzdENvbnRlbnRSZWN0T2Nj
bHVkZWQoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJU
eXBlPihsYXllciksIGxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UobGF5ZXIpLCBtX3N0
YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IHJldHVybiBmYWxzZTsKIH0KQEAgLTI1NiwyMiArMjU3LDIwIEBAIHN0YXRpYyBpbmxpbmUgSW50
UmVjdCByZWN0U3VidHJhY3RSZWdpb24oY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgUmVnaW9u
JiByZWdpCiAgICAgcmV0dXJuIGJvdW5kc1JlY3Q7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGNvbXB1
dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lv
biYgb2NjbHVzaW9uKQorc3RhdGljIGlubGluZSBJbnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVkQ29u
dGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0
LCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKIHsKLSAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRR
dWFkID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0
KSk7Ci0gICAgaWYgKCF0cmFuc2Zvcm1lZFF1YWQuaXNSZWN0aWxpbmVhcigpKQotICAgICAgICBy
ZXR1cm4gY29udGVudFJlY3Q7Ci0gICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCBhdCBl
YWNoIHN0ZXAgaGVyZSwgYXMgd2Ugd2FudCB0byBjb250YWluIGFueSB1bm9jY2x1ZGVkIHBhcnRp
YWwgcGl4ZWxzIGluIHRoZSByZXN1bHRpbmcgSW50UmVjdC4KLSAgICBJbnRSZWN0IHNocnVua1Jl
Y3QgPSByZWN0U3VidHJhY3RSZWdpb24oZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1lZFF1YWQu
Ym91bmRpbmdCb3goKSksIG9jY2x1c2lvbik7CisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybWVkUmVj
dCA9IGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChjb250ZW50UmVjdCkp
OworICAgIC8vIFRha2UgdGhlIGVuY2xvc2luZ0ludFJlY3QgYXQgZWFjaCBzdGVwLCBhcyB3ZSB3
YW50IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQgcGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3Vs
dGluZyBJbnRSZWN0LgorICAgIEludFJlY3Qgc2hydW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lv
bihpbnRlcnNlY3Rpb24oZW5jbG9zaW5nSW50UmVjdCh0cmFuc2Zvcm1lZFJlY3QpLCBzY2lzc29y
UmVjdCksIG9jY2x1c2lvbik7CiAgICAgSW50UmVjdCB1bm9jY2x1ZGVkUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoY29udGVudFNwYWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVj
dChzaHJ1bmtSZWN0KSkpOwotICAgIC8vIFRoZSB1c2Ugb2YgZW5jbG9zaW5nSW50UmVjdCwgd2l0
aCBmbG9hdGluZyBwb2ludCByb3VuZGluZywgY2FuIGdpdmUgdXMgYSByZXN1bHQgdGhhdCBpcyBu
b3QgYSBzdWItcmVjdCBvZiBjb250ZW50UmVjdCwgYnV0IG91cgotICAgIC8vIHJldHVybiB2YWx1
ZSBzaG91bGQgYmUgYSBzdWItcmVjdC4KKyAgICAvLyBUaGUgcmVjdCBiYWNrIGluIGNvbnRlbnQg
c3BhY2UgaXMgYSBib3VuZGluZyBib3ggYW5kIG1heSBleHRlbmQgb3V0c2lkZSBvZiB0aGUgb3Jp
Z2luYWwgY29udGVudFJlY3QsIHNvIGNsYW1wIGl0IHRvIHRoZSBjb250ZW50UmVjdEJvdW5kcy4K
ICAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2NjbHVkZWRSZWN0LCBjb250ZW50UmVjdCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+CiBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJm
YWNlVHlwZT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllclR5cGUqIGxheWVyLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKIHsKKyAgICBBU1NFUlQoIW1fc3RhY2su
aXNFbXB0eSgpKTsKICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBj
b250ZW50UmVjdDsKIApAQCAtMjgxLDMxICsyODAsMjQgQEAgSW50UmVjdCBDQ09jY2x1c2lvblRy
YWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojp1bm9jY2x1ZGVkQ29udGVu
dFIKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRl
bnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpOwogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNvbnRlbnRUb1RhcmdldFN1cmZhY2UgPSBjb250ZW50VG9UYXJnZXRTdXJm
YWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpOwogCi0gICAgSW50UmVjdCB1bm9jY2x1ZGVk
SW5TY3JlZW4gPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250
ZW50VG9TY3JlZW5TcGFjZSwgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4pOwotICAg
IEludFJlY3QgdW5vY2NsdWRlZEluVGFyZ2V0ID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVj
dChjb250ZW50UmVjdCwgY29udGVudFRvVGFyZ2V0U3VyZmFjZSwgbV9zdGFjay5sYXN0KCkub2Nj
bHVzaW9uSW5UYXJnZXQpOworICAgIEludFJlY3QgdW5vY2NsdWRlZEluU2NyZWVuID0gY29tcHV0
ZVVub2NjbHVkZWRDb250ZW50UmVjdChjb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2Us
IG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNj
cmVlbik7CisgICAgaWYgKHVub2NjbHVkZWRJblNjcmVlbi5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRl
VW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNl
LCBsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKGxheWVyKSwgbV9zdGFjay5sYXN0KCku
b2NjbHVzaW9uSW5UYXJnZXQpOwogCiAgICAgcmV0dXJuIGludGVyc2VjdGlvbih1bm9jY2x1ZGVk
SW5TY3JlZW4sIHVub2NjbHVkZWRJblRhcmdldCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1JbnRSZWN0IENDT2NjbHVzaW9u
VHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnN1cmZhY2VVbm9jY2x1
ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiBsYXllciwgY29uc3QgSW50UmVjdCYgc3Vy
ZmFjZUNvbnRlbnRSZWN0KSBjb25zdAorSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjpsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJm
YWNlKGNvbnN0IExheWVyVHlwZSogbGF5ZXIpIGNvbnN0CiB7Ci0gICAgLy8gQSBzdXJmYWNlIGlz
IG5vdCBvY2NsdWRlZCBieSBsYXllcnMgZHJhd2luZyBpbnRvIGl0c2VsZiwgc28gd2UgbmVlZCB0
byB1c2Ugb2NjbHVzaW9uIGZyb20gb25lIHNwb3QgZG93biBvbiB0aGUgc3RhY2suCi0gICAgaWYg
KG1fc3RhY2suc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIHN1cmZhY2VDb250ZW50UmVjdDsK
LQotICAgIEFTU0VSVChsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKLSAgICBBU1NFUlQobGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSA9PSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlKTsKLQotICAgIC8vIFdl
IHdhbnQgdG8gcmV0dXJuIGEgcmVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdmlzaWJsZSBwYXJ0
cyBvZiB8Y29udGVudFJlY3R8IGluIGJvdGggc2NyZWVuIHNwYWNlIGFuZCBpbiB0aGUgdGFyZ2V0
IHN1cmZhY2UuCi0gICAgLy8gU28gd2UgZmluZCB0aGUgdmlzaWJsZSBwYXJ0cyBvZiB8Y29udGVu
dFJlY3R8IGluIGVhY2ggc3BhY2UsIGFuZCB0YWtlIHRoZSBpbnRlcnNlY3Rpb24uCi0KLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9TY3JlZW5TcGFjZSA9IGNvbnRlbnRUb1NjcmVl
blNwYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpOwotCi0gICAgY29uc3QgU3RhY2tPYmpl
Y3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3RhY2suc2l6ZSgpLTJdOwotICAgIEludFJlY3Qg
dW5vY2NsdWRlZEluU2NyZWVuID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChzdXJmYWNl
Q29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlLCBzZWNvbmRMYXN0Lm9jY2x1c2lvbklu
U2NyZWVuKTsKLQotICAgIHJldHVybiB1bm9jY2x1ZGVkSW5TY3JlZW47CisgICAgY29uc3QgUmVu
ZGVyU3VyZmFjZVR5cGUqIHRhcmdldFN1cmZhY2UgPSBtX3N0YWNrLmxhc3QoKS5zdXJmYWNlOwor
ICAgIEZsb2F0UmVjdCB0b3RhbFNjaXNzb3IgPSB0YXJnZXRTdXJmYWNlLT5jb250ZW50UmVjdCgp
OworICAgIGlmIChtX3N1cmZhY2VEYW1hZ2VDbGllbnQpCisgICAgICAgIHRvdGFsU2Npc3Nvci5p
bnRlcnNlY3QobV9zdXJmYWNlRGFtYWdlQ2xpZW50LT5kYW1hZ2VSZWN0KHRhcmdldFN1cmZhY2Up
KTsKKyAgICBpZiAoIWxheWVyLT5jbGlwUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgdG90YWxT
Y2lzc29yLmludGVyc2VjdChsYXllci0+Y2xpcFJlY3QoKSk7CisgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QodG90YWxTY2lzc29yKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBl
LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KQEAgLTMyNCwyNyArMzE2LDI5IEBAIGNvbnN0
IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPjo6Y3VycmVudE9jY2x1CiAKIAogLy8gRGVjbGFyZSB0aGUgcG9zc2libGUgZnVuY3Rpb25z
IGhlcmUgZm9yIHRoZSBsaW5rZXIuCit0ZW1wbGF0ZSBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OkNDT2NjbHVzaW9uVHJhY2tlckJh
c2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpOwordGVtcGxhdGUgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBjb25z
dCBDQ09jY2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnQqIHN1cmZhY2VEYW1hZ2VDbGllbnQpOwog
dGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJh
Y2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6ZmluaXNoZWRU
YXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IExheWVyQ2hyb21pdW0qIG93bmluZ0xheWVyLCBjb25z
dCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGZpbmlzaGVkVGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQg
Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0qIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5
ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5
ZXIoY29uc3QgTGF5ZXJDaHJvbWl1bSopOwogdGVtcGxhdGUgYm9vbCBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46Om9jY2x1ZGVkKGNv
bnN0IExheWVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci10
ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtPjo6c3VyZmFjZU9jY2x1ZGVkKGNvbnN0IExheWVyQ2hyb21pdW0qLCBj
b25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgSW50UmVj
dCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJv
bWl1bT46OnVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllckNocm9taXVtKiwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwotdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46OnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNvbnN0IEludFJl
Y3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBjb25zdCBSZWdpb24mIEND
T2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
Pjo6Y3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdDsKIHRlbXBsYXRlIGNvbnN0
IFJlZ2lvbiYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0+OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0
ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVu
ZGVyU3VyZmFjZUNocm9taXVtPjo6bGF5ZXJTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShjb25z
dCBMYXllckNocm9taXVtKikgY29uc3Q7CiAKK3RlbXBsYXRlIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OkNDT2NjbHVzaW9uVHJhY2tlckJhc2Uo
SW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpOwordGVtcGxhdGUgQ0NPY2NsdXNpb25U
cmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6Q0NPY2NsdXNpb25UcmFj
a2VyQmFzZShJbnRSZWN0IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSwgY29uc3QgQ0NPY2NsdXNp
b25UcmFja2VyRGFtYWdlQ2xpZW50SW1wbCogc3VyZmFjZURhbWFnZUNsaWVudCk7CiB0ZW1wbGF0
ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT46OmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRlclN1cmZhY2UqIG5ld1Rh
cmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGws
IENDUmVuZGVyU3VyZmFjZT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ0xh
eWVySW1wbCogb3duaW5nTGF5ZXIsIGNvbnN0IENDUmVuZGVyU3VyZmFjZSogZmluaXNoZWRUYXJn
ZXQpOwogdGVtcGxhdGUgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBD
Q1JlbmRlclN1cmZhY2U+OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBDQ1JlbmRl
clN1cmZhY2UqIG5ld1RhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46Om1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGNvbnN0IENDTGF5ZXJJbXBsKik7CiB0ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46Om9jY2x1ZGVkKGNvbnN0IENDTGF5ZXJJ
bXBsKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwotdGVtcGxhdGUgYm9vbCBD
Q09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpzdXJm
YWNlT2NjbHVkZWQoY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29u
dGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgSW50UmVjdCBDQ09jY2x1c2lvblRyYWNrZXJCYXNl
PENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Ojp1bm9jY2x1ZGVkQ29udGVudFJlY3QoY29u
c3QgQ0NMYXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci10ZW1w
bGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVy
U3VyZmFjZT46OnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgQ0NMYXllckltcGwq
LCBjb25zdCBJbnRSZWN0JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0OwogdGVtcGxhdGUgY29u
c3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1
cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogdGVtcGxhdGUg
Y29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRl
clN1cmZhY2U+OjpjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7Cit0ZW1w
bGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVy
U3VyZmFjZT46OmxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgQ0NMYXllcklt
cGwqKSBjb25zdDsKIAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNr
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2Nj
bHVzaW9uVHJhY2tlci5oCmluZGV4IGQxYzgzM2UxYTliYTRlZWRlOWFiZGY0MzAyMWU3ZWQ3YjRj
NGZmMTYuLmI3YzBlM2IyOGZjMDczMTNhZTZlMTIwZGQ5M2FkMzc2ZmJkYzBkODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVz
aW9uVHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCkBAIC0zNiw2ICszNiwxNSBAQCBjbGFzcyBDQ1Jl
bmRlclN1cmZhY2U7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgUmVuZGVyU3VyZmFjZUNo
cm9taXVtOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KK2NsYXNzIEND
T2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEJhc2UgeworcHVibGljOgorICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGRhbWFnZVJlY3QoY29uc3QgUmVuZGVyU3VyZmFjZVR5cGUqKSBjb25zdCA9IDA7
Cit9OworCit0eXBlZGVmIENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEJhc2U8UmVuZGVy
U3VyZmFjZUNocm9taXVtPiBDQ09jY2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnQ7Cit0eXBlZGVm
IENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEJhc2U8Q0NSZW5kZXJTdXJmYWNlPiBDQ09j
Y2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnRJbXBsOworCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gdHJhY2sgb2NjbHVzaW9uIG9mIGxheWVycyB3aGlsZSB0cmF2ZXJzaW5nIHRoZW0gaW4gYSBm
cm9udC10by1iYWNrIG9yZGVyLiBBcyBlYWNoIGxheWVyIGlzIHZpc2l0ZWQsIG9uZSBvZiB0aGUK
IC8vIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBpcyBjYWxsZWQgdG8gbm90aWZ5IGl0IGFib3V0IHRo
ZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLgogLy8gVGhlbiwgb2NjbHVzaW9uIGluIHRoZSBjb250
ZW50IHNwYWNlIG9mIHRoZSBjdXJyZW50IGxheWVyIG1heSBiZSBxdWVyaWVkLCB2aWEgbWV0aG9k
cyBzdWNoIGFzIG9jY2x1ZGVkKCkgYW5kIHVub2NjbHVkZWRDb250ZW50UmVjdCgpLgpAQCAtNDMs
OCArNTIsMTEgQEAgY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOwogLy8gRmluYWxseSwgb25j
ZSBmaW5pc2hlZCB3aXRoIHRoZSBsYXllciwgb2NjbHVzaW9uIGJlaGluZCB0aGUgbGF5ZXIgc2hv
dWxkIGJlIG1hcmtlZCBieSBjYWxsaW5nIG1hcmtPY2NsdWRlZEJlaGluZExheWVyKCkuCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogY2xh
c3MgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NP
Y2NsdXNpb25UcmFja2VyQmFzZSk7CisgICAgdHlwZWRlZiBDQ09jY2x1c2lvblRyYWNrZXJEYW1h
Z2VDbGllbnRCYXNlPFJlbmRlclN1cmZhY2VUeXBlPiBEYW1hZ2VDbGllbnRUeXBlOwogcHVibGlj
OgotICAgIENDT2NjbHVzaW9uVHJhY2tlckJhc2UoKSB7IH0KKyAgICBDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKTsKKyAgICBDQ09jY2x1c2lv
blRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBjb25zdCBEYW1h
Z2VDbGllbnRUeXBlKik7CiAKICAgICAvLyBDYWxsZWQgd2hlbiB2aXNpdGluZyBhIGxheWVyIHJl
cHJlc2VudGluZyBpdHNlbGYuIElmIHRoZSB0YXJnZXQgd2FzIG5vdCBhbHJlYWR5IGN1cnJlbnQs
IHRoZW4gdGhpcyBpbmRpY2F0ZXMgd2UgaGF2ZSBlbnRlcmVkIGEgbmV3IHN1cmZhY2Ugc3VidHJl
ZS4KICAgICB2b2lkIGVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShjb25zdCBSZW5kZXJTdXJmYWNl
VHlwZSogbmV3VGFyZ2V0KTsKQEAgLTY1LDExICs3Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBHaXZl
cyBhbiB1bm9jY2x1ZGVkIHN1Yi1yZWN0IG9mIHxjb250ZW50UmVjdHwgaW4gdGhlIGNvbnRlbnQg
c3BhY2Ugb2YgdGhlIGxheWVyLiBVc2VkIHdoZW4gY29uc2lkZXJpbmcgb2NjbHVzaW9uIGZvciBh
IGxheWVyIHRoYXQgcGFpbnRzL2RyYXdzIHNvbWV0aGluZy4KICAgICBJbnRSZWN0IHVub2NjbHVk
ZWRDb250ZW50UmVjdChjb25zdCBMYXllclR5cGUqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkgY29uc3Q7CiAKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlY3QgaW4gY29u
dGVudCBzcGFjZSBmb3IgdGhlIFJlbmRlclN1cmZhY2Ugb3duZWQgYnkgdGhlIGxheWVyIGlzIGZ1
bGx5IG9jY2x1ZGVkIGluIGVpdGhlciBzY3JlZW4gc3BhY2Ugb3IgdGhlIGxheWVyJ3MgdGFyZ2V0
IHN1cmZhY2UuCi0gICAgYm9vbCBzdXJmYWNlT2NjbHVkZWQoY29uc3QgTGF5ZXJUeXBlKiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OwotICAgIC8vIEdpdmVzIGFuIHVub2NjbHVk
ZWQgc3ViLXJlY3Qgb2YgfGNvbnRlbnRSZWN0fCBpbiB0aGUgY29udGVudCBzcGFjZSBvZiB0aGUg
UmVuZGVyU3VyZmFjZSBvd25lZCBieSB0aGUgbGF5ZXIuIFVzZWQgd2hlbiBjb25zaWRlcmluZyBv
Y2NsdXNpb24gZm9yIGEgdGFyZ2V0IHN1cmZhY2UuCi0gICAgSW50UmVjdCBzdXJmYWNlVW5vY2Ns
dWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KSBjb25zdDsKLQogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgaW4gZnV0dXJlLCB0aGV5
IGFyZSB0byBtYWtlIENMcyBmb3IgdHJhbnNpdGlvbmluZyB0byB0aGlzIGVhc2llci4KICAgICBj
b25zdCBSZWdpb24mIGN1cnJlbnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3Q7CiAgICAg
Y29uc3QgUmVnaW9uJiBjdXJyZW50T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3Q7CkBA
IC05MCw4ICs5NywxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gV2UgbWVyZ2UgdGhlIG9jY2x1c2lv
biBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayB3aXRoIHRoZSBuZXcgY3VycmVudCBzdWJ0cmVlLiBU
aGlzIG5ldyB0YXJnZXQgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRo
ZXJlLgogICAgIFZlY3RvcjxTdGFja09iamVjdCwgMT4gbV9zdGFjazsKIAorICAgIC8vIEFsbG93
IHRlc3RzIHRvIG92ZXJyaWRlIHRoaXMuCisgICAgdmlydHVhbCBJbnRSZWN0IGxheWVyU2Npc3Nv
clJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgTGF5ZXJUeXBlKikgY29uc3Q7CisKIHByaXZhdGU6
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NPY2NsdXNpb25UcmFja2VyQmFzZSk7CisgICAg
SW50UmVjdCBtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZTsKKyAgICBjb25zdCBEYW1hZ2VDbGll
bnRUeXBlKiBtX3N1cmZhY2VEYW1hZ2VDbGllbnQ7CiB9OwogCiB0eXBlZGVmIENDT2NjbHVzaW9u
VHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiBDQ09jY2x1
c2lvblRyYWNrZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
T2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRleCA2NzhlYzk2NDUyYjBiYWVkNjg3YWVmNjY2
NjJkZjNkOGQ1MTA1ZGE4Li5kYzQxNTJkZjFhMGFkZTUzNDUwOTQyOGIxYzIxNDBhODgxYzM5NTEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJh
Y2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNp
b25UcmFja2VyVGVzdC5jcHAKQEAgLTY4LDE3ICs2OCw1MSBAQCBwdWJsaWM6CiAvLyBBIHN1YmNs
YXNzIHRvIGV4cG9zZSB0aGUgdG90YWwgY3VycmVudCBvY2NsdXNpb24uCiBjbGFzcyBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlciB7CiBwdWJsaWM6Cisg
ICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0IHNjcmVlblNjaXNzb3JSZWN0KQorICAg
ICAgICA6IENDT2NjbHVzaW9uVHJhY2tlcihzY3JlZW5TY2lzc29yUmVjdCkKKyAgICAgICAgLCBt
X292ZXJyaWRlTGF5ZXJTY2lzc29yUmVjdChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgVGVz
dENDT2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0IHNjcmVlblNjaXNzb3JSZWN0LCBjb25zdCBDQ09j
Y2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnQqIGRhbWFnZUNsaWVudCkKKyAgICAgICAgOiBDQ09j
Y2x1c2lvblRyYWNrZXIoc2NyZWVuU2Npc3NvclJlY3QsIGRhbWFnZUNsaWVudCkKKyAgICAgICAg
LCBtX292ZXJyaWRlTGF5ZXJTY2lzc29yUmVjdChmYWxzZSkKKyAgICB7CisgICAgfQorCiAgICAg
UmVnaW9uIG9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdCB7IHJldHVybiBDQ09jY2x1c2lv
blRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuOyB9CiAgICAgUmVnaW9u
IG9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIENDT2NjbHVzaW9uVHJh
Y2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5UYXJnZXQ7IH0KIAogICAgIHZvaWQgc2V0
T2NjbHVzaW9uSW5TY3JlZW5TcGFjZShjb25zdCBSZWdpb24mIHJlZ2lvbikgeyBDQ09jY2x1c2lv
blRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuID0gcmVnaW9uOyB9CiAg
ICAgdm9pZCBzZXRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoY29uc3QgUmVnaW9uJiByZWdpb24p
IHsgQ0NPY2NsdXNpb25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCA9
IHJlZ2lvbjsgfQorCisgICAgdm9pZCBzZXRMYXllclNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpIHsgbV9vdmVycmlkZUxheWVyU2Npc3NvclJlY3QgPSB0cnVlOyBtX2xheWVyU2Npc3Nv
clJlY3QgPSByZWN0O30KKyAgICB2b2lkIHJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpIHsgbV9vdmVy
cmlkZUxheWVyU2Npc3NvclJlY3QgPSBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCBJbnRSZWN0IGxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UoY29uc3QgTGF5ZXJDaHJv
bWl1bSogbGF5ZXIpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVMYXllclNjaXNzb3JSZWN0ID8g
bV9sYXllclNjaXNzb3JSZWN0IDogQ0NPY2NsdXNpb25UcmFja2VyOjpsYXllclNjaXNzb3JSZWN0
SW5UYXJnZXRTdXJmYWNlKGxheWVyKTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9vdmVycmlk
ZUxheWVyU2Npc3NvclJlY3Q7CisgICAgSW50UmVjdCBtX2xheWVyU2Npc3NvclJlY3Q7Cit9Owor
CitjbGFzcyBUZXN0RGFtYWdlQ2xpZW50IDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlckRhbWFn
ZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGhlIGludGVyZmFjZQorICAgIHZpcnR1YWwgRmxv
YXRSZWN0IGRhbWFnZVJlY3QoY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtKikgY29uc3QgeyBy
ZXR1cm4gbV9kYW1hZ2VSZWN0OyB9CisKKyAgICAvLyBUZXN0aW5nIHN0dWZmCisgICAgVGVzdERh
bWFnZUNsaWVudChjb25zdCBGbG9hdFJlY3QmIGRhbWFnZVJlY3QpIDogbV9kYW1hZ2VSZWN0KGRh
bWFnZVJlY3QpIHsgfQorICAgIHZvaWQgc2V0RGFtYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGRh
bWFnZVJlY3QpIHsgbV9kYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsgfQorCitwcml2YXRlOgorICAg
IEZsb2F0UmVjdCBtX2RhbWFnZVJlY3Q7CiB9OwogCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhh
dCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNp
b25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKQEAgLTk4LDYgKzEzMiw5IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb24pCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDAp
KTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAs
IDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50
LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihsYXllci5nZXQoKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMzAsIDcwLCA3
MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkuYm91bmRzKCkpOwpAQCAtMTEx
LDYgKzE0OCwxNCBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09j
Y2x1ZGVkUmVnaW9uKQogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50
LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNzAsIDcwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkpOwog
CisgICAgb2NjbHVzaW9uLnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMwLCA3MCwgNzAp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3MCwgNzApKSk7CisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcw
LCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNz
b3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMw
LCA3MCwgNzApKS5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjksIDMw
LCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjks
IDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgyOSwgMjksIDcwLCA3MCkpKTsKQEAgLTEyNSw3ICsxNzAsNiBAQCBURVNUKEND
T2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQogVEVTVChD
Q09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3Rh
dGlvbikKIHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJl
IGJlaW5nIHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CkBAIC0xNTAsNiArMTk0
LDkgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJl
Z2lvbldpdGhSb3RhdGlvbikKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1
c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAg
ICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgp
KTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSwgb2NjbHVzaW9u
Lm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CkBAIC0xNjMsNiArMjEwLDE0IEBA
IFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25X
aXRoUm90YXRpb24pCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1
c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7CiAK
KyAgICBvY2NsdXNpb24ucmVzZXRMYXllclNjaXNzb3JSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzAsIDcwLCA3MCkp
KTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMjksIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCAzMCwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDMxLCA3MCwgNzApKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3Nv
clJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzAs
IDcwLCA3MCkpLmlzRW1wdHkoKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwgMzAs
IDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyOSwg
MjksIDcwLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgp
LCBJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSkpOwpAQCAtMTc3LDcgKzIzMiw2IEBAIFRFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRp
b24pCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVn
aW9uV2l0aFRyYW5zbGF0aW9uKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQg
dHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9j
Y2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsK
QEAgLTIwMCw2ICsyNTQsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRk
ZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQogCiAgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisg
ICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAx
MDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5k
TGF5ZXIobGF5ZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCA1
MCwgNTApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygpKTsKQEAg
LTIxMyw2ICsyNzAsMTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVk
VG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MSwgNTAsIDUwLCA1MCkpKTsKICAg
ICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1
MCwgNTEsIDUwLCA1MCkpKTsKIAorICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3Qo
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDUwLCA1MCwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA1MCwgNTAsIDUwKSkpOworICAgIEVYUEVDVF9G
QUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA0OSwgNTAs
IDUwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoNTEsIDUwLCA1MCwgNTApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkpKTsKKyAgICBvY2Ns
dXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwog
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSkuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDQ5LCA1MCwgMSwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNTAsIDUwLCA1MCkpKTsKICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDQ5LCA1MCwgNTApKSk7CkBAIC0yMjIs
MTIgKzI4NywyMyBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09j
Y2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
NTEsIDUxLCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCg1MSwgNTEsIDUwLCA1MCkpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDUwLCAxMDAsIDUwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJl
bnQuZ2V0KCksIEludFJlY3QoNTAsIDUxLCA1MCwgNTApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCg0OSwgNTEsIDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5LCA1MSwgNTAsIDUwKSkpOworCisgICAgb2NjbHVzaW9u
LnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSku
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA1MCwgMSwgNTApLCBv
Y2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwg
NTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDQ5LCA0OSwgNTAsIDUw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
NDksIDQ5LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNDksIDUw
LCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoNTAsIDQ5LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MSwgNDks
IDQ5LCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoNTEsIDQ5LCA1MCwgNTApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKS5p
c0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSkuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCg0OSwgNTEsIDEsIDQ5KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUxLCA1MCwgNTApKSk7CisgICAgb2NjbHVzaW9u
LnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CiB9CiAKIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRo
Um90YXRlZFN1cmZhY2UpCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFu
c2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVz
aW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKQEAgLTI1Nyw2ICszMzMsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVy
QWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQogCiAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJm
YWNlKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihsYXllci5nZXQoKSk7CiAKQEAgLTI3MSw2ICszNTAsMTQgQEAgVEVTVChDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVk
U3VyZmFjZSkKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgp
LCBJbnRSZWN0KDEwLCA0MzAsIDYxLCA3MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9u
Lm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MSkpKTsKIAorICAg
IG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5
LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MSwgNzApKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0
KDEwLCA0MzAsIDYwLCA3MSkpKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJ
bnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRC
ZWhpbmRMYXllcihjaGlsZC5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVu
ZGVyU3VyZmFjZShjaGlsZC5nZXQoKSwgY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2Nj
bHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
KTsKQEAgLTI4Myw2ICszNzAsMTYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXll
ckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKICAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYw
KSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYwKSkpOworICAgIEVYUEVD
VF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCA0MCwg
NzAsIDYwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYwKSkpOworCisgICAgb2NjbHVzaW9uLnJlc2V0TGF5
ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjApKSk7
CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMzAsIDM5LCA3MCwgNjApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgNDAsIDcwLCA2MCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MSwgNzAsIDYw
KSkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAw
MCwgMTAwMCkpOwogCiAKICAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVz
aW9uIGZyb20gfGxheWVyfDoKQEAgLTMxNCw3ICs0MTEsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJh
Y2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRTdXJmYWNlKQog
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldp
dGhTdXJmYWNlQWxyZWFkeU9uU3RhY2spCiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSBy
aWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKQEAgLTM1MCw2ICs0NDYsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFN1cmZhY2VBbHJlYWR5T25TdGFjawog
CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15
TWF4VGV4dHVyZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24o
SW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3Nv
clJlY3QoSW50UmVjdCgtMTAsIC0xMCwgMTAwMCwgMTAwMCkpOworCiAgICAgb2NjbHVzaW9uLmVu
dGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2Nj
bHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7CiAKQEAgLTM3Miw2
ICs0NzEsMTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2Ns
dWRlZFJlZ2lvbldpdGhTdXJmYWNlQWxyZWFkeU9uU3RhY2sKICAgICBFWFBFQ1RfRkFMU0Uob2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0
KDEwLCA0MzEsIDYwLCA3MCkpKTsKIAorICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJl
Y3QoKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIElu
dFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwgNjAs
IDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwg
SW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpKTsKKyAgICBvY2Ns
dXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0xMCwgLTEwLCAxMDAwLCAxMDAwKSk7
CisKICAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
LmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7CiAgICAgLy8gVGhp
cyBpcyB0aGUgbGl0dGxlIHBpZWNlIG5vdCBvY2NsdWRlZCBieSBjaGlsZDIKICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDksIDQzMCwgMSwgMTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkpOwpAQCAtMzg3LDgg
KzQ5NCwxNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1
ZGVkUmVnaW9uV2l0aFN1cmZhY2VBbHJlYWR5T25TdGFjawogICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoNzAsIDQzMCwgMSwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNo
aWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsKICAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA1MDAsIDYwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzApKSk7CiAKLSAgICAvLyBTdXJm
YWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgotICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAs
IDcwKSkpOworICAgIG9jY2x1c2lvbi5yZXNldExheWVyU2Npc3NvclJlY3QoKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYw
LCA3MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA4MCkpLmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGls
ZC5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRS
ZWN0KC0xMCwgNDMwLCA2MCwgODApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwg
NjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpLmlzRW1w
dHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChj
aGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzApKS5pc0VtcHR5KCkpOworICAgIG9j
Y2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOwog
CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgpKTsKICAg
ICAvLyB8Y2hpbGQyfCBzaG91bGQgZ2V0IG1lcmdlZCB3aXRoIHRoZSBzdXJmYWNlIHdlIGFyZSBs
ZWF2aW5nIG5vdwpAQCAtNDMzLDEwICs1NDgsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFN1cmZhY2VBbHJlYWR5T25TdGFjawog
ICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCA0MCwgMSwgNjApLCBvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgNDAsIDcwLCA2MCkp
KTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAxMDAsIDcwLCAxKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQxLCA3MCwg
NjApKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBk
cmF3IGludG8gaXRzZWxmLgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDQwLCA3MCwg
NjApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7Ci0KLQogICAgIC8qIEp1c3RpZmljYXRpb24gZm9y
IHRoZSBhYm92ZSBvY2NsdXNpb24gZnJvbSB8bGF5ZXJ8OgogICAgICAgICAgICAgICAgMTAwCiAg
ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTQ2NSw3ICs1NzYsNiBAQCBURVNU
KENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFN1
cmZhY2VBbHJlYWR5T25TdGFjawogCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVy
QWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRPZmZBeGlzU3VyZmFjZSkKIHsKLSAgICBU
ZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNo
aWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC01MDEsNiArNjExLDkgQEAgVEVTVChD
Q09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3Rh
dGVkT2ZmQXhpc1N1cmZhY2UKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1
c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAg
ICAgSW50UmVjdCBjbGlwcGVkTGF5ZXJJbkNoaWxkID0gbGF5ZXJUcmFuc2Zvcm0ubWFwUmVjdChs
YXllci0+dmlzaWJsZUxheWVyUmVjdCgpKTsKIAogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJl
bmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC01MzAsOSArNjQzLDYgQEAg
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldp
dGhSb3RhdGVkT2ZmQXhpc1N1cmZhY2UKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIGNsaXBwZWRMYXllckluQ2hpbGQpLmlzRW1w
dHkoKSk7CiAgICAgY2xpcHBlZExheWVySW5DaGlsZC5tb3ZlKDAsIC0xKTsKIAotICAgIC8vIFN1
cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0g
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCA1MDAsIDUwMCksIG9jY2x1c2lvbi5zdXJm
YWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDAsIDAsIDUwMCwg
NTAwKSkpOwotCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdl
dCgpKTsKICAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdl
dCgpLCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubGVhdmVUb1Rhcmdl
dFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtNTQ0LDE1ICs2NTQs
MTEgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJl
Z2lvbldpdGhSb3RhdGVkT2ZmQXhpc1N1cmZhY2UKIAogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDc1LCA1NSwgMSwgMSkpKTsKICAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDc1LCA1NSwgMSwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDc1LCA1NSwgMSwgMSkpKTsKLQotICAg
IC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNl
bGYuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIG9jY2x1c2lv
bi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCkpKTsKIH0KIAogVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFk
ZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhNdWx0aXBsZU9wYXF1ZUxheWVycykKIHsKICAgICAvLyBU
aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIHRlc3QgYnV0IG5vdyB3ZSBtYWtlIGEgZmV3
IG9wYXF1ZSBsYXllcnMgaW5zaWRlIG9mIHxjaGlsZHwgc28gdGhhdCB0aGUgb2NjbHVkZWQgcGFy
dHMgb2YgY2hpbGQgYXJlIG5vdCBhIHNpbXBsZSByZWN0LgotICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKQEAgLTU4NSw2ICs2OTEsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aE11bHRpcGxlT3BhcXVlTGF5ZXJz
KQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNp
b24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Np
c3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1
c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOwogICAgIG9jY2x1c2lv
bi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjEuZ2V0KCkpOwpAQCAtNjA2LDkgKzcxNSw2
IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdp
b25XaXRoTXVsdGlwbGVPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg3
MCwgNDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0
KCksIEludFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMTAsIDUwMCwgNjAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
LmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMg
bm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2Nj
bHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7
Ci0KICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOwog
ICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0KCksIGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC02MjgsMTAgKzczNCw2IEBAIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRo
TXVsdGlwbGVPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDQw
LCAxLCA2MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDMxLCA0MCwgNzAsIDYwKSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAs
IDEwMCwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgzMCwgNDEsIDcwLCA2MCkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9j
Y2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDAsIDcwLCA2MCkpKTsKLQotCiAg
ICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbiBmcm9tIHxsYXllcjF8
IGFuZCB8bGF5ZXIyfDoKIAogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC02NjEs
NyArNzYzLDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2Ns
dWRlZFJlZ2lvbldpdGhNdWx0aXBsZU9wYXF1ZUxheWVycykKIFRFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNlcykK
IHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5n
IHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTY5OCw2ICs3
OTksOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRo
T3ZlcmxhcHBpbmdTaWJsaW5nU3VyZmFjZXMpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0
Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsK
KyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0xMCwgLTEwLCAxMDAw
LCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxk
Mi0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5
ZXIobGF5ZXIyLmdldCgpKTsKIApAQCAtNzEyLDkgKzgxNiw2IEBAIFRFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNl
cykKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50
UmVjdCgwLCA0MjAsIDYxLCA4MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1
ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYwLCA4MSkpKTsKIAotICAgIC8vIFN1
cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0g
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgwLCA0MjAsIDYwLCA4MCksIG9jY2x1c2lvbi5zdXJm
YWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgwLCA0MjAsIDYw
LCA4MCkpKTsKLQogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDIu
Z2V0KCkpOwogICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQy
LmdldCgpLCBjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLmxlYXZlVG9U
YXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTczMiw5ICs4
MzMsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRo
T3ZlcmxhcHBpbmdTaWJsaW5nU3VyZmFjZXMpCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5v
Y2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3MSwgNzApKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMw
LCA3MCwgNzEpKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3Mg
dGhhdCBkcmF3IGludG8gaXRzZWxmLCBidXQgdGhlIHxjaGlsZDF8IHN1cmZhY2Ugc2hvdWxkIGJl
IG9jY2x1ZGVkIGJ5IHRoZSB8Y2hpbGQyfCBzdXJmYWNlLgotICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMCwgNDMwLCAxMCwgNzApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50
UmVjdChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMwLCA3MCwgNzApKSk7Ci0KICAgICBvY2Ns
dXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQxLmdldCgpKTsKICAgICBvY2NsdXNp
b24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMS5nZXQoKSwgY2hpbGQxLT5yZW5k
ZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC03NTQsMTAgKzg1Miw2IEBAIFRFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdT
dXJmYWNlcykKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQo
KSwgSW50UmVjdCgxOSwgNDAsIDgwLCA2MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMCwgMzksIDgwLCA2MCkpKTsKIAotICAg
IC8vIHxjaGlsZDF8IGFuZCB8Y2hpbGQyfCBib3RoIGRyYXcgaW50byBwYXJlbnQgc28gdGhleSBz
aG91bGQgbm90IG9jY2x1ZGUgaXQuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMCwgMzAs
IDgwLCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgyMCwgMzAsIDgwLCA3MCkpKTsKLQotCiAgICAgLyogSnVzdGlmaWNhdGlv
biBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbjoKICAgICAgICAgICAgICAgIDEwMAogICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTc4Nyw3ICs4ODEsNiBAQCBURVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25XaXRoT3ZlcmxhcHBpbmdTaWJsaW5nU3VyZmFj
ZXMpCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVl
blNwYWNlKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBh
cmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAt
ODMxLDYgKzkyNCw5IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1
c2lvbkluU2NyZWVuU3BhY2UpCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NPY2NsdXNp
b25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2Ns
dXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0yMCwgLTIwLCAxMDAwLCAxMDAwKSk7
CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi0+cmVuZGVy
U3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIy
LmdldCgpKTsKIApAQCAtODQ1LDkgKzk0MSwxMyBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRl
c3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNlKQogICAgIEVYUEVDVF9GQUxTRShvY2Ns
dXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDIwLCA3MSwgODApKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJl
Y3QoLTEwLCA0MjAsIDcwLCA4MSkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVk
IGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVu
dFJlY3QoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDIwLCA3MCwgODApKSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0
KDMwLCAyNTAsIDEsIDEpKSk7CisgICAgb2NjbHVzaW9uLnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJl
Y3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVk
ZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMSwgNDIwLCA3MCwgODApKSk7CisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQxOSwg
NzAsIDgwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0
KCksIEludFJlY3QoLTEwLCA0MjAsIDcxLCA4MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KC0xMCwgNDIwLCA3MCwgODEpKSk7Cisg
ICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgtMjAsIC0yMCwgMTAwMCwg
MTAwMCkpOwogCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5n
ZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDIu
Z2V0KCksIGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTg2NiwxNCArOTY2LDYgQEAgVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFjZSkK
ICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVj
dCgtMTAsIDQzMCwgODEsIDcwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVk
ZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KC0xMCwgNDMwLCA4MCwgNzEpKSk7CiAKLSAgICAvLyBT
dXJmYWNlIGlzIG5vdCBvY2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLCBi
dXQgdGhlIHxjaGlsZDF8IHN1cmZhY2Ugc2hvdWxkIGJlIG9jY2x1ZGVkIGJ5IHRoZSB8Y2hpbGQy
fCBzdXJmYWNlLgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoLTEwLCA0MzAsIDEwLCA4MCks
IG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQoKSwgSW50
UmVjdCgtMTAsIDQzMCwgNzAsIDgwKSkpOwotICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5zdXJm
YWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQzMCwgNzAsIDgwKSkpOwotICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50
UmVjdCgtMSwgNDMwLCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJm
YWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQyOSwgNzAsIDgwKSkpOwotICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50
UmVjdCgxLCA0MzAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZh
Y2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoMCwgNDMxLCA3MCwgODApKSk7Ci0KICAg
ICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQxLmdldCgpKTsKICAgICBv
Y2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMS5nZXQoKSwgY2hpbGQx
LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC04OTMsMTEgKzk4NSw2IEBAIFRFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCiAg
ICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MTksIDMwLCA4MCwgNzApKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjAsIDI5LCA4MCwgNzApKSk7CiAKLSAgICAvLyB8Y2hpbGQx
fCBhbmQgfGNoaWxkMnwgYm90aCBkcmF3IGludG8gcGFyZW50IHNvIHRoZXkgc2hvdWxkIG5vdCBv
Y2NsdWRlIGl0LgotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAsIDIwLCA4MCwgODApLCBv
Y2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMjAsIDIwLCA4MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNl
T2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MCwgMSwgMSkpKTsKLQotCiAgICAg
LyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbjoKICAgICAgICAgICAgICAg
IDEwMAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTkyNiw3ICsxMDEzLDYgQEAg
VEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFj
ZSkKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVu
U3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUg
cmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkMSA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOwpAQCAtOTc1LDYgKzEwNjEsOSBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykK
IAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNz
b3JSZWN0KEludFJlY3QoLTMwLCAtMzAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5l
bnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9j
Y2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkpOwogCkBAIC05ODks
MTAgKzEwNzgsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNp
b25JblNjcmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykKICAgICBFWFBFQ1RfRkFMU0Uob2Nj
bHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzEsIDgwKSkp
OwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRS
ZWN0KC0xMCwgNDIwLCA3MCwgODEpKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBvY2NsdWRl
ZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgotICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoLTEwLCA0MjAsIDcwLCA4MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgwKSkpOwotICAgIEVY
UEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgzMCwgMjUwLCAxLCAxKSkpOwotCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGNoaWxkMi5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjaGlsZDIuZ2V0KCksIGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNp
b24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpA
QCAtMTAxMCwxNiArMTA5NSw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFj
ZU9jY2x1c2lvbkluU2NyZWVuU3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogICAgIEVYUEVDVF9G
QUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMCwgLTE5LCA4
MCwgOTApKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDEuZ2V0
KCksIEludFJlY3QoNDIxLCAtMjAsIDgwLCA5MCkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90
IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxk
MXwgc3VyZmFjZSBzaG91bGQgYmUgb2NjbHVkZWQgYnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCi0g
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0MjAsIC0yMCwgODAsIDkwKSwgb2NjbHVzaW9uLnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMCwgLTIw
LCA4MCwgOTApKSk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0OTAsIC0xMCwgMTAsIDgw
KSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQxLmdldCgpLCBJ
bnRSZWN0KDQyMCwgLTEwLCA4MCwgODApKSk7Ci0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0
MjAsIC0yMCwgNzAsIDEwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3Qo
Y2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMCwgLTIwLCA3MCwgOTApKSk7Ci0gICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoNDIwLCAt
MTAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRl
ZChjaGlsZDEuZ2V0KCksIEludFJlY3QoNDE5LCAtMTAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1Rf
RkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoNDIw
LCAtMTEsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2Ns
dWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3QoNDIxLCAtMTAsIDcwLCA4MCkpKTsKLSAgICBFWFBF
Q1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3Qo
NDIwLCAtOSwgNzAsIDgwKSkpOwotCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGNoaWxkMS5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjaGlsZDEuZ2V0KCksIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNp
b24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpA
QCAtMTAzNSwxNCArMTExMCw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFj
ZU9jY2x1c2lvbkluU2NyZWVuU3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogICAgIEVYUEVDVF9G
QUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDExLCAyMCwgOTAs
IDgwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgp
LCBJbnRSZWN0KDEwLCAyMSwgOTAsIDgwKSkpOwogCi0gICAgLy8gfGNoaWxkMXwgYW5kIHxjaGls
ZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBub3Qgb2NjbHVkZSBpdC4K
LSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwLCAyMCwgOTAsIDgwKSwgb2NjbHVzaW9uLnN1
cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwLCAyMCwg
OTAsIDgwKSkpOwotICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9jY2x1ZGVkKHBh
cmVudC5nZXQoKSwgSW50UmVjdCgxMCwgMjAsIDEsIDEpKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9j
Y2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDk5LCAyMCwgMSwg
MSkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMTAsIDksIDEsIDEpKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lv
bi5zdXJmYWNlT2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDk5LCA5OSwgMSwgMSkpKTsK
LQotCiAgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbjoKICAgICAg
ICAgICAgICAgIDEwMAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEwNzEsNyAr
MTEzOCw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbklu
U2NyZWVuU3BhY2VEaWZmZXJlbnRUcmFuc2Zvcm1zKQogVEVTVChDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LCBvY2NsdXNpb25JbnRlcmFjdGlvbldpdGhGaWx0ZXJzKQogewogICAgIC8vIFRoaXMgdGVz
dHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBibHVyTGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7CkBAIC0xMTIxLDYgKzExODcsOSBAQCBURVNUKENDT2NjbHVz
aW9uVHJhY2tlclRlc3QsIG9jY2x1c2lvbkludGVyYWN0aW9uV2l0aEZpbHRlcnMpCiAKICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0
KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJ
bnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIC8vIE9wYWNpdHkgbGF5ZXIgd29uJ3Qg
Y29udHJpYnV0ZSB0byBvY2NsdXNpb24uCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVy
U3VyZmFjZShvcGFjaXR5TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1h
cmtPY2NsdWRlZEJlaGluZExheWVyKG9wYWNpdHlMYXllci5nZXQoKSk7CkBAIC0xMTcwLDQgKzEy
MzksNzc4IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgb2NjbHVzaW9uSW50ZXJhY3Rp
b25XaXRoRmlsdGVycykKICAgICBFWFBFQ1RfRVEoMXUsIG9jY2x1c2lvbi5vY2NsdXNpb25JblRh
cmdldFN1cmZhY2UoKS5yZWN0cygpLnNpemUoKSk7CiB9CiAKK1RFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgbGF5ZXJTY2lzc29yUmVjdE92ZXJUaWxlKQoreworICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50
LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAg
ZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAg
cGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMo
ZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgz
MDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVy
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVt
bXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVu
dCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1
c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJT
Y2lzc29yUmVjdChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpOworCisgICAgb2NjbHVzaW9u
LmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIu
Z2V0KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3Qo
MTAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVk
ZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2Nj
bHVzaW9uLnJlc2V0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7Cisg
ICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAx
MDApKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQo
KSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgx
MDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAg
IG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAs
IDAsIDMwMCwgMzAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVl
blNjaXNzb3JSZWN0T3ZlclRpbGUpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxh
eWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJh
dGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+
c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgw
LCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVu
dC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygp
KSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1
cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3Qo
MjAwLCAxMDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJT
dXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAs
IDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXll
ci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDAp
KSk7CisKKyAgICAvLyBPY2NsdWRlZCBzaW5jZSBpdHMgb3V0c2lkZSB0aGUgc3VyZmFjZSBib3Vu
ZHMuCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRS
ZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIC8vIFRlc3Qgd2l0aG91dCBhbnkgc2Np
c3NvcnMuCisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5n
ZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgb2NjbHVzaW9uLnJlc2V0
TGF5ZXJTY2lzc29yUmVjdCgpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAw
LCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVy
LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9j
Y2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAw
LCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVy
LmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDIwMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdl
dCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAyMDAsIDEwMCwg
MTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAx
MDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgbGF5ZXJTY2lzc29yUmVjdE92ZXJDdWxsZWRUaWxlKQoreworICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3
IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAg
cGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7
CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7
CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZp
bHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVu
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDAp
LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBp
bnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91
bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5k
KHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2Vy
IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0
TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpOworCisgICAgb2Nj
bHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsK
KworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVj
dCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQo
bGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEw
MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJ
bnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVk
ZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRS
ZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRl
ZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgx
MDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIw
MCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwg
MjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAs
IDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAw
LCAzMDApKS5pc0VtcHR5KCkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNj
cmVlblNjaXNzb3JSZWN0T3ZlckN1bGxlZFRpbGUpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJv
bWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0
ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJl
bnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0
ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwg
MzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxv
YXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOwor
ICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQt
PmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsK
KworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9u
KEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJn
ZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50
UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAs
IDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdl
dCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgp
LCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQo
KSwgSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwg
SW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkp
KTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJl
bmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1wdHko
KSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJTY2lzc29yUmVjdE92
ZXJQYXJ0aWFsVGlsZXMpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJl
bnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsK
KworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMo
KS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAu
NSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0Rmls
dGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhw
YXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0
Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7Cisg
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVu
dC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwg
MTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3Qo
NTAsIDUwLCAyMDAsIDIwMCkpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNp
b24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAg
RVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAx
MDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5
ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
b2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEw
MCkpKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQo
KSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsK
KworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAy
MDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgwLCAwLCAzMDAsIDMwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgNTAs
IDUwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDAsIDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAw
LCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoMjAwLCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0
KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsK
K30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzY3JlZW5TY2lzc29yUmVjdE92ZXJQ
YXJ0aWFsVGlsZXMpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQt
PmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKwor
ICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5h
cHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwg
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVy
cyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUo
MzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEy
OworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xp
cFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5n
ZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsK
KworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoNTAsIDUwLCAy
MDAsIDIwMCkpOworCisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXll
ci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVk
ZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZB
TFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwg
MTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCks
IEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9u
Lm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKwor
ICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAg
b2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVy
LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAx
MDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJl
bnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEw
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJl
bnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNU
X0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAs
IDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
RkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwg
MjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9j
Y2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAz
MDAsIDMwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgNTAsIDUwLCA1MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAs
IDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCAxMDAsIDUw
LCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50
UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAw
LCAxMDAsIDUwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5n
ZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgxMDAsIDIwMCwgMTAwLCA1MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKK30KKworVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllclNjaXNzb3JSZWN0T3Zlck5vVGlsZXMpCit7
CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIg
PSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBw
YXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVu
dExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJh
dGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9u
OjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAg
ICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCks
IHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5
ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAg
IG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoNTAwLCA1MDAsIDEwMCwgMTAw
KSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVy
LmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgx
MDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChs
YXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNp
b24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5s
ZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
b2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXll
ci5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEw
MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0
KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQo
KSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgp
LCBJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCks
IEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9U
YXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDAsIDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAs
IDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpLmlzRW1w
dHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQo
KSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworfQorCitURVNUKEND
T2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNzb3JSZWN0T3Zlck5vVGlsZXMpCit7Cisg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJl
bnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExh
eWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlv
bnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBs
YXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRy
dWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoNTAwLCA1MDAsIDEwMCwgMTAwKSk7CisKKyAg
ICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEw
MCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQo
KSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09j
Y2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFy
Z2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9u
LmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsK
KworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwg
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJl
Y3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0
KDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3Qo
MjAwLCAyMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5k
ZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAs
IDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkpLmlz
RW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVj
dChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgxMDAsIDIwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworfQorCitURVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3QsIGxheWVyU2Npc3NvclJlY3RGb3JMYXllck9mZk9yaWdpbikKK3sKKyAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIp
OworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBm
aWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlT
Q0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVy
LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEwMCwgMTAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRy
dWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCisgICAg
b2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIC8vIFRoaXMgbGF5ZXIgaXMgdHJhbnNsYXRlZCB3aGVuIGRyYXduIGludG8gaXRz
IHRhcmdldC4gU28gaWYgdGhlIHNjaXNzb3IgcmVjdCBnaXZlbiBmcm9tIHRoZSB0YXJnZXQgc3Vy
ZmFjZQorICAgIC8vIGlzIG5vdCBpbiB0aGF0IHRhcmdldCBzcGFjZSwgdGhlbiBhZnRlciB0cmFu
c2xhdGluZyB0aGVzZSBxdWVyeSByZWN0cyBpbnRvIHRoZSB0YXJnZXQsIHRoZXkgd2lsbCBmYWxs
IG91dHNpZGUKKyAgICAvLyB0aGUgc2Npc3NvciBhbmQgYmUgY29uc2lkZXJlZCBvY2NsdWRlZC4K
KyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0
KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQo
bGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwg
SW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgZGFtYWdlUmVjdE92ZXJUaWxlKQoreworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5hZGRD
aGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVy
cy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50
TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVy
cyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMw
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAg
ICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5i
b3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7CisK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0RGFtYWdlQ2xpZW50IGRhbWFnZShGbG9hdFJlY3Qo
MjAwLCAxMDAsIDEwMCwgMTAwKSk7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNp
b24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSwgJmRhbWFnZSk7CisKKyAgICBvY2NsdXNpb24u
ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5n
ZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgx
MDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICAvLyBPdXRzaWRlIHRoZSBsYXllcidzIGNsaXAg
cmVjdC4KKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRl
ZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRl
clRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJl
Y3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEw
MCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNU
X0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAs
IDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDIw
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAy
MDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJm
YWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoMjAwLCAxMDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7Cit9CisKK1RFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgZGFtYWdlUmVjdE92ZXJDdWxsZWRUaWxlKQoreworICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7Cisg
ICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRl
cnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxF
KSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNl
dEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBh
cmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKwor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3Vy
ZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKKyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHBhcmVudCk7CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0RGFtYWdlQ2xpZW50IGRh
bWFnZShGbG9hdFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSk7CisgICAgVGVzdENDT2NjbHVzaW9u
VHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSwgJmRhbWFnZSk7CisK
KyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgp
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIu
Z2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1
c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0
KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJ
bnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgZGFtYWdlUmVjdE92ZXJQYXJ0aWFsVGlsZXMpCit7CisgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQt
PmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBm
aWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBw
YXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhm
aWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0
UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMw
MCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1t
eU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNl
dENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkp
OworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJl
bnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50
KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3REYW1hZ2VDbGllbnQgZGFtYWdlKEZsb2F0
UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSk7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2Ns
dXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSwgJmRhbWFnZSk7CisKKyAgICBvY2NsdXNp
b24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisg
ICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxh
eWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIElu
dFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRl
ZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRl
clRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJl
Y3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQ
RUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEw
MCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIw
MCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVk
KHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgw
LCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3Qo
MjAwLCAyMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5k
ZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoNTAsIDUwLCAyMDAsIDIwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoMjAwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1
ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKSk7
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAx
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDUw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MTAwLCAyMDAsIDEwMCwgMTAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3Qs
IGRhbWFnZVJlY3RPdmVyTm9UaWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQo
bGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3Bl
cmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVy
LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwor
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVy
ZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgVGVzdERhbWFnZUNsaWVudCBkYW1hZ2UoRmxvYXRSZWN0KDUwMCwg
NTAwLCAxMDAsIDEwMCkpOworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKElu
dFJlY3QoMCwgMCwgMTAwMCwgMTAwMCksICZkYW1hZ2UpOworCisgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAs
IDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCks
IEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAx
MDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVy
KGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2Uo
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRl
clN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAw
LCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVy
LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdl
dCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwg
MTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5n
ZXQoKSwgSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQo
KSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEw
MCkpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQt
PnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRl
ZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpLmlzRW1w
dHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwg
MTAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwg
MTAwKSkuaXNFbXB0eSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130492</attachid>
            <date>2012-03-06 17:36:13 -0800</date>
            <delta_ts>2012-03-07 18:36:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79927-20120306203612.patch</filename>
            <type>text/plain</type>
            <size>99512</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE0NTRiYjQ5NzYyMjZk
NTU4MTM1YWU1NDg4ZmFjZDFjNWJiNTUwMy4uMmFiMjE0ZmVlNWU5MWQyNTg5YTQ4Y2Y0MTZkN2Fi
OTg4YWZlOGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAzLTAyICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGNsaXBwaW5nIHRvIHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBsb2dpYyB0byBDQ09j
Y2x1c2lvblRyYWNrZXIgdG8gb2NjbHVkZSBhbnl0aGluZyBvdXRzaWRlIG9mIHRoZQorICAgICAg
ICBjdXJyZW50IHNjcmVlbiBhbmQgdGFyZ2V0IHN1cmZhY2Ugc2Npc3NvciByZWN0cy4gV2hlbiB0
cmFja2luZworICAgICAgICBkYW1hZ2UgZm9yIHBhcnRpYWwgc3dhcHMsIHRoZSBzY2lzc29yIHJl
Y3RzIGFyZSBib3VuZGVkIGJ5IHRoZQorICAgICAgICB0cmFja2VkIGRhbWFnZSByZWN0cy4KKwor
ICAgICAgICBVbml0IHRlc3RzOiBDQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6bWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6dGVzdENvbnRlbnRSZWN0T2NjbHVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6OjpvY2NsdWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6bGF5ZXJTY2lzc29yUmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEJhc2UpOgor
ICAgICAgICAoQ0NPY2NsdXNpb25UcmFja2VyQmFzZSk6CisKIDIwMTItMDMtMDIgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIG1l
ZGlhL21lZGlhLWNhbi1wbGF5LWZsYWMtYXVkaW8uaHRtbCBmYWlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBkZjFjMjVlZDQ5NjViN2IwYWVhOGMzOGUwODRhODhhYTgyZTg4MzA3Li44
Y2VjM2QxYWFkNGU5OTMyMWJjM2U3Y2E4YjVmNTdjNjJjYzliY2ZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAzLTAyICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGNsaXBwaW5nIHRv
IHNjaXNzb3IgcmVjdCB0byBDQ09jY2x1c2lvblRyYWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5OTI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OlRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIpOgorICAgICAgICAoVGVzdENDT2NjbHVzaW9uVHJhY2tlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyOjpzZXRMYXllclNjaXNzb3JSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNrZXI6OnVzZURlZmF1bHRM
YXllclNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDQ09jY2x1c2lvblRyYWNr
ZXI6OmxheWVyU2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXN0
RGFtYWdlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3REYW1hZ2VDbGllbnQ6OmRhbWFn
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdERhbWFnZUNsaWVudDo6VGVzdERhbWFnZUNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0RGFtYWdlQ2xpZW50OjpzZXREYW1hZ2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTAzLTAxICBDYWlvIE1hcmNlbG8g
ZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAg
ICAgTWFrZSBwYXJzZXIgY29kZSBub3QgZGVwZW5kIG9uIE5hbWVkTm9kZU1hcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNp
b25UcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAKaW5kZXggYzU2MTFhYzI3YTZhZWM0YTdmYmQ2OTQw
MjNkMzQzZjUyYmE1ZDIzYy4uNjU4NTQ1NGZmY2I3NjBlZDhkMWY1ZjNkM2E0OTJjMzc3ZTQzNjhj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3BwCkBAIC0zOSw2ICszOSwy
MCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6Q0NPY2NsdXNp
b25UcmFja2VyQmFzZShJbnRSZWN0IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSkKKyAgICA6IG1f
c2Npc3NvclJlY3RJblNjcmVlblNwYWNlKHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSkKKyAgICAs
IG1fc3VyZmFjZURhbWFnZUNsaWVudCgwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZShJ
bnRSZWN0IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSwgY29uc3QgRGFtYWdlQ2xpZW50VHlwZSog
c3VyZmFjZURhbWFnZUNsaWVudCkKKyAgICA6IG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlKHNj
aXNzb3JSZWN0SW5TY3JlZW5TcGFjZSkKKyAgICAsIG1fc3VyZmFjZURhbWFnZUNsaWVudChzdXJm
YWNlRGFtYWdlQ2xpZW50KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgogdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjplbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY29u
c3QgUmVuZGVyU3VyZmFjZVR5cGUqIG5ld1RhcmdldCkKIHsKICAgICBpZiAoIW1fc3RhY2suaXNF
bXB0eSgpICYmIG1fc3RhY2subGFzdCgpLnN1cmZhY2UgPT0gbmV3VGFyZ2V0KQpAQCAtMTkxLDYg
KzIwNSw4IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5CiB7CiAgICAgQVNTRVJUKCFtX3N0YWNr
LmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPT0g
bV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobGF5ZXItPmRyYXdPcGFjaXR5KCkgIT0gMSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjAyLDQxICsyMTgsMjYgQEAgdm9pZCBDQ09jY2x1c2lvblRyYWNrZXJC
YXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjptYXJrT2NjbHVkZWRCZWhpbmRMYXkK
ICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldC51bml0ZShjb21wdXRlT2NjbHVz
aW9uQmVoaW5kTGF5ZXI8TGF5ZXJUeXBlPihsYXllciwgY29udGVudFRvVGFyZ2V0U3VyZmFjZSkp
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50
U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQorc3RhdGljIGlubGluZSBi
b29sIHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0JiBzY2lzc29yUmVjdCwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24pCiB7Ci0gICAgRmxv
YXRRdWFkIHRyYW5zZm9ybWVkUXVhZCA9IGNvbnRlbnRTcGFjZVRyYW5zZm9ybS5tYXBRdWFkKEZs
b2F0UXVhZChjb250ZW50UmVjdCkpOwotICAgIHJldHVybiBvY2NsdXNpb24uY29udGFpbnModHJh
bnNmb3JtZWRRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIEZsb2F0UmVjdCB0cmFu
c2Zvcm1lZFJlY3QgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUmVjdChGbG9hdFJlY3QoY29u
dGVudFJlY3QpKTsKKyAgICAvLyBUYWtlIHRoZSBlbmNsb3NpbmdJbnRSZWN0LCBhcyB3ZSB3YW50
IHRvIGluY2x1ZGUgcGFydGlhbCBwaXhlbHMgaW4gdGhlIHRlc3QuCisgICAgSW50UmVjdCB0YXJn
ZXRSZWN0ID0gaW50ZXJzZWN0aW9uKGVuY2xvc2luZ0ludFJlY3QodHJhbnNmb3JtZWRSZWN0KSwg
c2Npc3NvclJlY3QpOworICAgIHJldHVybiB0YXJnZXRSZWN0LmlzRW1wdHkoKSB8fCBvY2NsdXNp
b24uY29udGFpbnModGFyZ2V0UmVjdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+CiBib29sIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om9jY2x1ZGVkKGNvbnN0IExheWVyVHlw
ZSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAogeworICAgIEFTU0VS
VCghbV9zdGFjay5pc0VtcHR5KCkpOwogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7CiAKLSAgICBpZiAodGVzdENvbnRlbnRSZWN0
T2NjbHVkZWQoY29udGVudFJlY3QsIGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtPExheWVy
VHlwZT4obGF5ZXIpLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbikpCisgICAgaWYg
KHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5TcGFj
ZVRyYW5zZm9ybTxMYXllclR5cGU+KGxheWVyKSwgbV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2Us
IG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuKSkKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgaWYgKHRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKGNvbnRlbnRSZWN0LCBjb250ZW50VG9U
YXJnZXRTdXJmYWNlVHJhbnNmb3JtPExheWVyVHlwZT4obGF5ZXIpLCBtX3N0YWNrLmxhc3QoKS5v
Y2NsdXNpb25JblRhcmdldCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KLWJvb2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6c3VyZmFjZU9jY2x1ZGVkKGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0
IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3QKLXsKLSAgICAvLyBBIHN1cmZhY2Ug
aXMgbm90IG9jY2x1ZGVkIGJ5IGxheWVycyBkcmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBuZWVk
IHRvIHVzZSBvY2NsdXNpb24gZnJvbSBvbmUgc3BvdCBkb3duIG9uIHRoZSBzdGFjay4KLSAgICBp
ZiAobV9zdGFjay5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NF
UlQobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7Ci0gICAgQVNTRVJUKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgPT0gbV9zdGFjay5sYXN0KCkuc3VyZmFjZSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzdXJmYWNlQ29udGVudFRvU2NyZWVuU3BhY2UgPSBjb250ZW50VG9TY3JlZW5TcGFjZVRy
YW5zZm9ybTxMYXllclR5cGU+KGxheWVyKTsKLQotICAgIGNvbnN0IFN0YWNrT2JqZWN0JiBzZWNv
bmRMYXN0ID0gbV9zdGFja1ttX3N0YWNrLnNpemUoKS0yXTsKLSAgICBpZiAodGVzdENvbnRlbnRS
ZWN0T2NjbHVkZWQoc3VyZmFjZUNvbnRlbnRSZWN0LCBzdXJmYWNlQ29udGVudFRvU2NyZWVuU3Bh
Y2UsIHNlY29uZExhc3Qub2NjbHVzaW9uSW5TY3JlZW4pKQorICAgIGlmICh0ZXN0Q29udGVudFJl
Y3RPY2NsdWRlZChjb250ZW50UmVjdCwgY29udGVudFRvVGFyZ2V0U3VyZmFjZVRyYW5zZm9ybTxM
YXllclR5cGU+KGxheWVyKSwgbGF5ZXJTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShsYXllciks
IG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjU2LDIyICsyNTcsMjAgQEAgc3RhdGljIGlubGlu
ZSBJbnRSZWN0IHJlY3RTdWJ0cmFjdFJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBS
ZWdpb24mIHJlZ2kKICAgICByZXR1cm4gYm91bmRzUmVjdDsKIH0KIAotc3RhdGljIEludFJlY3Qg
Y29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3Qg
UmVnaW9uJiBvY2NsdXNpb24pCitzdGF0aWMgaW5saW5lIEludFJlY3QgY29tcHV0ZVVub2NjbHVk
ZWRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgc2Npc3Nv
clJlY3QsIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQogewotICAgIEZsb2F0UXVhZCB0cmFuc2Zv
cm1lZFF1YWQgPSBjb250ZW50U3BhY2VUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoY29udGVu
dFJlY3QpKTsKLSAgICBpZiAoIXRyYW5zZm9ybWVkUXVhZC5pc1JlY3RpbGluZWFyKCkpCi0gICAg
ICAgIHJldHVybiBjb250ZW50UmVjdDsKLSAgICAvLyBUYWtlIHRoZSBlbmNsb3NpbmdJbnRSZWN0
IGF0IGVhY2ggc3RlcCBoZXJlLCBhcyB3ZSB3YW50IHRvIGNvbnRhaW4gYW55IHVub2NjbHVkZWQg
cGFydGlhbCBwaXhlbHMgaW4gdGhlIHJlc3VsdGluZyBJbnRSZWN0LgotICAgIEludFJlY3Qgc2hy
dW5rUmVjdCA9IHJlY3RTdWJ0cmFjdFJlZ2lvbihlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVk
UXVhZC5ib3VuZGluZ0JveCgpKSwgb2NjbHVzaW9uKTsKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3Jt
ZWRSZWN0ID0gY29udGVudFNwYWNlVHJhbnNmb3JtLm1hcFJlY3QoRmxvYXRSZWN0KGNvbnRlbnRS
ZWN0KSk7CisgICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCBhdCBlYWNoIHN0ZXAsIGFz
IHdlIHdhbnQgdG8gY29udGFpbiBhbnkgdW5vY2NsdWRlZCBwYXJ0aWFsIHBpeGVscyBpbiB0aGUg
cmVzdWx0aW5nIEludFJlY3QuCisgICAgSW50UmVjdCBzaHJ1bmtSZWN0ID0gcmVjdFN1YnRyYWN0
UmVnaW9uKGludGVyc2VjdGlvbihlbmNsb3NpbmdJbnRSZWN0KHRyYW5zZm9ybWVkUmVjdCksIHNj
aXNzb3JSZWN0KSwgb2NjbHVzaW9uKTsKICAgICBJbnRSZWN0IHVub2NjbHVkZWRSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChjb250ZW50U3BhY2VUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3QoRmxv
YXRSZWN0KHNocnVua1JlY3QpKSk7Ci0gICAgLy8gVGhlIHVzZSBvZiBlbmNsb3NpbmdJbnRSZWN0
LCB3aXRoIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nLCBjYW4gZ2l2ZSB1cyBhIHJlc3VsdCB0aGF0
IGlzIG5vdCBhIHN1Yi1yZWN0IG9mIGNvbnRlbnRSZWN0LCBidXQgb3VyCi0gICAgLy8gcmV0dXJu
IHZhbHVlIHNob3VsZCBiZSBhIHN1Yi1yZWN0LgorICAgIC8vIFRoZSByZWN0IGJhY2sgaW4gY29u
dGVudCBzcGFjZSBpcyBhIGJvdW5kaW5nIGJveCBhbmQgbWF5IGV4dGVuZCBvdXRzaWRlIG9mIHRo
ZSBvcmlnaW5hbCBjb250ZW50UmVjdCwgc28gY2xhbXAgaXQgdG8gdGhlIGNvbnRlbnRSZWN0Qm91
bmRzLgogICAgIHJldHVybiBpbnRlcnNlY3Rpb24odW5vY2NsdWRlZFJlY3QsIGNvbnRlbnRSZWN0
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlPjo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSogbGF5
ZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAogeworICAgIEFTU0VSVCghbV9z
dGFjay5pc0VtcHR5KCkpOwogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGNvbnRlbnRSZWN0OwogCkBAIC0yODEsMzEgKzI4MCwyNCBAQCBJbnRSZWN0IENDT2NjbHVz
aW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2NjbHVkZWRD
b250ZW50UgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlID0g
Y29udGVudFRvU2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggY29udGVudFRvVGFyZ2V0U3VyZmFjZSA9IGNvbnRlbnRUb1Rhcmdl
dFN1cmZhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7CiAKLSAgICBJbnRSZWN0IHVub2Nj
bHVkZWRJblNjcmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3Qs
IGNvbnRlbnRUb1NjcmVlblNwYWNlLCBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbik7
Ci0gICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRl
bnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9UYXJnZXRTdXJmYWNlLCBtX3N0YWNrLmxhc3Qo
KS5vY2NsdXNpb25JblRhcmdldCk7CisgICAgSW50UmVjdCB1bm9jY2x1ZGVkSW5TY3JlZW4gPSBj
b21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCBjb250ZW50VG9TY3JlZW5T
cGFjZSwgbV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIG1fc3RhY2subGFzdCgpLm9jY2x1c2lv
bkluU2NyZWVuKTsKKyAgICBpZiAodW5vY2NsdWRlZEluU2NyZWVuLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBJbnRSZWN0IHVub2NjbHVkZWRJblRhcmdldCA9IGNv
bXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIGNvbnRlbnRUb1RhcmdldFN1
cmZhY2UsIGxheWVyU2Npc3NvclJlY3RJblRhcmdldFN1cmZhY2UobGF5ZXIpLCBtX3N0YWNrLmxh
c3QoKS5vY2NsdXNpb25JblRhcmdldCk7CiAKICAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHVub2Nj
bHVkZWRJblNjcmVlbiwgdW5vY2NsdWRlZEluVGFyZ2V0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLUludFJlY3QgQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6c3VyZmFjZVVu
b2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllclR5cGUqIGxheWVyLCBjb25zdCBJbnRSZWN0
JiBzdXJmYWNlQ29udGVudFJlY3QpIGNvbnN0CitJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmxheWVyU2Npc3NvclJlY3RJblRhcmdl
dFN1cmZhY2UoY29uc3QgTGF5ZXJUeXBlKiBsYXllcikgY29uc3QKIHsKLSAgICAvLyBBIHN1cmZh
Y2UgaXMgbm90IG9jY2x1ZGVkIGJ5IGxheWVycyBkcmF3aW5nIGludG8gaXRzZWxmLCBzbyB3ZSBu
ZWVkIHRvIHVzZSBvY2NsdXNpb24gZnJvbSBvbmUgc3BvdCBkb3duIG9uIHRoZSBzdGFjay4KLSAg
ICBpZiAobV9zdGFjay5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gc3VyZmFjZUNvbnRlbnRS
ZWN0OwotCi0gICAgQVNTRVJUKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIEFTU0VSVChs
YXllci0+cmVuZGVyU3VyZmFjZSgpID09IG1fc3RhY2subGFzdCgpLnN1cmZhY2UpOwotCi0gICAg
Ly8gV2Ugd2FudCB0byByZXR1cm4gYSByZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSB2aXNpYmxl
IHBhcnRzIG9mIHxjb250ZW50UmVjdHwgaW4gYm90aCBzY3JlZW4gc3BhY2UgYW5kIGluIHRoZSB0
YXJnZXQgc3VyZmFjZS4KLSAgICAvLyBTbyB3ZSBmaW5kIHRoZSB2aXNpYmxlIHBhcnRzIG9mIHxj
b250ZW50UmVjdHwgaW4gZWFjaCBzcGFjZSwgYW5kIHRha2UgdGhlIGludGVyc2VjdGlvbi4KLQot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlID0gY29udGVudFRv
U2NyZWVuU3BhY2VUcmFuc2Zvcm08TGF5ZXJUeXBlPihsYXllcik7Ci0KLSAgICBjb25zdCBTdGFj
a09iamVjdCYgc2Vjb25kTGFzdCA9IG1fc3RhY2tbbV9zdGFjay5zaXplKCktMl07Ci0gICAgSW50
UmVjdCB1bm9jY2x1ZGVkSW5TY3JlZW4gPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHN1
cmZhY2VDb250ZW50UmVjdCwgY29udGVudFRvU2NyZWVuU3BhY2UsIHNlY29uZExhc3Qub2NjbHVz
aW9uSW5TY3JlZW4pOwotCi0gICAgcmV0dXJuIHVub2NjbHVkZWRJblNjcmVlbjsKKyAgICBjb25z
dCBSZW5kZXJTdXJmYWNlVHlwZSogdGFyZ2V0U3VyZmFjZSA9IG1fc3RhY2subGFzdCgpLnN1cmZh
Y2U7CisgICAgRmxvYXRSZWN0IHRvdGFsU2Npc3NvciA9IHRhcmdldFN1cmZhY2UtPmNvbnRlbnRS
ZWN0KCk7CisgICAgaWYgKG1fc3VyZmFjZURhbWFnZUNsaWVudCkKKyAgICAgICAgdG90YWxTY2lz
c29yLmludGVyc2VjdChtX3N1cmZhY2VEYW1hZ2VDbGllbnQtPmRhbWFnZVJlY3QodGFyZ2V0U3Vy
ZmFjZSkpOworICAgIGlmICghbGF5ZXItPmNsaXBSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICB0
b3RhbFNjaXNzb3IuaW50ZXJzZWN0KGxheWVyLT5jbGlwUmVjdCgpKTsKKyAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdCh0b3RhbFNjaXNzb3IpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgpAQCAtMzI0LDI3ICszMTYsMjkgQEAg
Y29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGU+OjpjdXJyZW50T2NjbHUKIAogCiAvLyBEZWNsYXJlIHRoZSBwb3NzaWJsZSBmdW5j
dGlvbnMgaGVyZSBmb3IgdGhlIGxpbmtlci4KK3RlbXBsYXRlIENDT2NjbHVzaW9uVHJhY2tlckJh
c2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6Q0NPY2NsdXNpb25UcmFj
a2VyQmFzZShJbnRSZWN0IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSk7Cit0ZW1wbGF0ZSBDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT46
OkNDT2NjbHVzaW9uVHJhY2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2Us
IGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudCogc3VyZmFjZURhbWFnZUNsaWVu
dCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPjo6ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogbmV3VGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNp
b25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpmaW5p
c2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY29uc3QgTGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIs
IGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogZmluaXNoZWRUYXJnZXQpOwogdGVtcGxhdGUg
dm9pZCBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT46OmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1cmZhY2VD
aHJvbWl1bSogbmV3VGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFz
ZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjptYXJrT2NjbHVkZWRCZWhp
bmRMYXllcihjb25zdCBMYXllckNocm9taXVtKik7CiB0ZW1wbGF0ZSBib29sIENDT2NjbHVzaW9u
VHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6b2NjbHVk
ZWQoY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25z
dDsKLXRlbXBsYXRlIGJvb2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpzdXJmYWNlT2NjbHVkZWQoY29uc3QgTGF5ZXJDaHJvbWl1
bSosIGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBJ
bnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFj
ZUNocm9taXVtPjo6dW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyQ2hyb21pdW0qLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci10ZW1wbGF0ZSBJbnRSZWN0IENDT2Nj
bHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPjo6
c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBMYXllckNocm9taXVtKiwgY29uc3Qg
SW50UmVjdCYgc3VyZmFjZUNvbnRlbnRSZWN0KSBjb25zdDsKIHRlbXBsYXRlIGNvbnN0IFJlZ2lv
biYgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+OjpjdXJyZW50T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0OwogdGVtcGxhdGUg
Y29uc3QgUmVnaW9uJiBDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bT46OmN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25z
dDsKK3RlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVt
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+OjpsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNl
KGNvbnN0IExheWVyQ2hyb21pdW0qKSBjb25zdDsKIAordGVtcGxhdGUgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6Q0NPY2NsdXNpb25UcmFja2Vy
QmFzZShJbnRSZWN0IHNjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSk7Cit0ZW1wbGF0ZSBDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+OjpDQ09jY2x1c2lv
blRyYWNrZXJCYXNlKEludFJlY3Qgc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBjb25zdCBDQ09j
Y2x1c2lvblRyYWNrZXJEYW1hZ2VDbGllbnRJbXBsKiBzdXJmYWNlRGFtYWdlQ2xpZW50KTsKIHRl
bXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlPjo6ZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IENDUmVuZGVyU3VyZmFjZSog
bmV3VGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVy
SW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6ZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0
IENDTGF5ZXJJbXBsKiBvd25pbmdMYXllciwgY29uc3QgQ0NSZW5kZXJTdXJmYWNlKiBmaW5pc2hl
ZFRhcmdldCk7CiB0ZW1wbGF0ZSB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllcklt
cGwsIENDUmVuZGVyU3VyZmFjZT46OmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IEND
UmVuZGVyU3VyZmFjZSogbmV3VGFyZ2V0KTsKIHRlbXBsYXRlIHZvaWQgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6bWFya09jY2x1ZGVkQmVoaW5k
TGF5ZXIoY29uc3QgQ0NMYXllckltcGwqKTsKIHRlbXBsYXRlIGJvb2wgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPjo6b2NjbHVkZWQoY29uc3QgQ0NM
YXllckltcGwqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci10ZW1wbGF0ZSBi
b29sIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46
OnN1cmZhY2VPY2NsdWRlZChjb25zdCBDQ0xheWVySW1wbCosIGNvbnN0IEludFJlY3QmIHN1cmZh
Y2VDb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0ZSBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tl
ckJhc2U8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT46OnVub2NjbHVkZWRDb250ZW50UmVj
dChjb25zdCBDQ0xheWVySW1wbCosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsK
LXRlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NS
ZW5kZXJTdXJmYWNlPjo6c3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBDQ0xheWVy
SW1wbCosIGNvbnN0IEludFJlY3QmIHN1cmZhY2VDb250ZW50UmVjdCkgY29uc3Q7CiB0ZW1wbGF0
ZSBjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIENDUmVu
ZGVyU3VyZmFjZT46OmN1cnJlbnRPY2NsdXNpb25JblNjcmVlblNwYWNlKCkgY29uc3Q7CiB0ZW1w
bGF0ZSBjb25zdCBSZWdpb24mIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8Q0NMYXllckltcGwsIEND
UmVuZGVyU3VyZmFjZT46OmN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdDsK
K3RlbXBsYXRlIEludFJlY3QgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxDQ0xheWVySW1wbCwgQ0NS
ZW5kZXJTdXJmYWNlPjo6bGF5ZXJTY2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShjb25zdCBDQ0xh
eWVySW1wbCopIGNvbnN0OwogCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9u
VHJhY2tlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NPY2NsdXNpb25UcmFja2VyLmgKaW5kZXggZDFjODMzZTFhOWJhNGVlZGU5YWJkZjQzMDIxZTdl
ZDdiNGM0ZmYxNi4uYjdjMGUzYjI4ZmMwNzMxM2FlNmUxMjBkZDkzYWQzNzZmYmRjMGQ4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NP
Y2NsdXNpb25UcmFja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmgKQEAgLTM2LDYgKzM2LDE1IEBAIGNsYXNz
IENDUmVuZGVyU3VyZmFjZTsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBSZW5kZXJTdXJm
YWNlQ2hyb21pdW07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgorY2xh
c3MgQ0NPY2NsdXNpb25UcmFja2VyRGFtYWdlQ2xpZW50QmFzZSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCBGbG9hdFJlY3QgZGFtYWdlUmVjdChjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSopIGNvbnN0
ID0gMDsKK307CisKK3R5cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyRGFtYWdlQ2xpZW50QmFzZTxS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0+IENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudDsKK3R5
cGVkZWYgQ0NPY2NsdXNpb25UcmFja2VyRGFtYWdlQ2xpZW50QmFzZTxDQ1JlbmRlclN1cmZhY2U+
IENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudEltcGw7CisKIC8vIFRoaXMgY2xhc3MgaXMg
dXNlZCB0byB0cmFjayBvY2NsdXNpb24gb2YgbGF5ZXJzIHdoaWxlIHRyYXZlcnNpbmcgdGhlbSBp
biBhIGZyb250LXRvLWJhY2sgb3JkZXIuIEFzIGVhY2ggbGF5ZXIgaXMgdmlzaXRlZCwgb25lIG9m
IHRoZQogLy8gbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGlzIGNhbGxlZCB0byBub3RpZnkgaXQgYWJv
dXQgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UuCiAvLyBUaGVuLCBvY2NsdXNpb24gaW4gdGhl
IGNvbnRlbnQgc3BhY2Ugb2YgdGhlIGN1cnJlbnQgbGF5ZXIgbWF5IGJlIHF1ZXJpZWQsIHZpYSBt
ZXRob2RzIHN1Y2ggYXMgb2NjbHVkZWQoKSBhbmQgdW5vY2NsdWRlZENvbnRlbnRSZWN0KCkuCkBA
IC00Myw4ICs1MiwxMSBAQCBjbGFzcyBSZW5kZXJTdXJmYWNlQ2hyb21pdW07CiAvLyBGaW5hbGx5
LCBvbmNlIGZpbmlzaGVkIHdpdGggdGhlIGxheWVyLCBvY2NsdXNpb24gYmVoaW5kIHRoZSBsYXll
ciBzaG91bGQgYmUgbWFya2VkIGJ5IGNhbGxpbmcgbWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoKS4K
IHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+
CiBjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDQ09jY2x1c2lvblRyYWNrZXJCYXNlKTsKKyAgICB0eXBlZGVmIENDT2NjbHVzaW9uVHJhY2tl
ckRhbWFnZUNsaWVudEJhc2U8UmVuZGVyU3VyZmFjZVR5cGU+IERhbWFnZUNsaWVudFR5cGU7CiBw
dWJsaWM6Ci0gICAgQ0NPY2NsdXNpb25UcmFja2VyQmFzZSgpIHsgfQorICAgIENDT2NjbHVzaW9u
VHJhY2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UpOworICAgIENDT2Nj
bHVzaW9uVHJhY2tlckJhc2UoSW50UmVjdCBzY2lzc29yUmVjdEluU2NyZWVuU3BhY2UsIGNvbnN0
IERhbWFnZUNsaWVudFR5cGUqKTsKIAogICAgIC8vIENhbGxlZCB3aGVuIHZpc2l0aW5nIGEgbGF5
ZXIgcmVwcmVzZW50aW5nIGl0c2VsZi4gSWYgdGhlIHRhcmdldCB3YXMgbm90IGFscmVhZHkgY3Vy
cmVudCwgdGhlbiB0aGlzIGluZGljYXRlcyB3ZSBoYXZlIGVudGVyZWQgYSBuZXcgc3VyZmFjZSBz
dWJ0cmVlLgogICAgIHZvaWQgZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNvbnN0IFJlbmRlclN1
cmZhY2VUeXBlKiBuZXdUYXJnZXQpOwpAQCAtNjUsMTEgKzc3LDYgQEAgcHVibGljOgogICAgIC8v
IEdpdmVzIGFuIHVub2NjbHVkZWQgc3ViLXJlY3Qgb2YgfGNvbnRlbnRSZWN0fCBpbiB0aGUgY29u
dGVudCBzcGFjZSBvZiB0aGUgbGF5ZXIuIFVzZWQgd2hlbiBjb25zaWRlcmluZyBvY2NsdXNpb24g
Zm9yIGEgbGF5ZXIgdGhhdCBwYWludHMvZHJhd3Mgc29tZXRoaW5nLgogICAgIEludFJlY3QgdW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IExheWVyVHlwZSosIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KSBjb25zdDsKIAotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVjdCBp
biBjb250ZW50IHNwYWNlIGZvciB0aGUgUmVuZGVyU3VyZmFjZSBvd25lZCBieSB0aGUgbGF5ZXIg
aXMgZnVsbHkgb2NjbHVkZWQgaW4gZWl0aGVyIHNjcmVlbiBzcGFjZSBvciB0aGUgbGF5ZXIncyB0
YXJnZXQgc3VyZmFjZS4KLSAgICBib29sIHN1cmZhY2VPY2NsdWRlZChjb25zdCBMYXllclR5cGUq
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci0gICAgLy8gR2l2ZXMgYW4gdW5v
Y2NsdWRlZCBzdWItcmVjdCBvZiB8Y29udGVudFJlY3R8IGluIHRoZSBjb250ZW50IHNwYWNlIG9m
IHRoZSBSZW5kZXJTdXJmYWNlIG93bmVkIGJ5IHRoZSBsYXllci4gVXNlZCB3aGVuIGNvbnNpZGVy
aW5nIG9jY2x1c2lvbiBmb3IgYSB0YXJnZXQgc3VyZmFjZS4KLSAgICBJbnRSZWN0IHN1cmZhY2VV
bm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgTGF5ZXJUeXBlKiwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpIGNvbnN0OwotCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBpbiBmdXR1cmUs
IHRoZXkgYXJlIHRvIG1ha2UgQ0xzIGZvciB0cmFuc2l0aW9uaW5nIHRvIHRoaXMgZWFzaWVyLgog
ICAgIGNvbnN0IFJlZ2lvbiYgY3VycmVudE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdDsK
ICAgICBjb25zdCBSZWdpb24mIGN1cnJlbnRPY2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25z
dDsKQEAgLTkwLDggKzk3LDEyIEBAIHByb3RlY3RlZDoKICAgICAvLyBXZSBtZXJnZSB0aGUgb2Nj
bHVzaW9uIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIHdpdGggdGhlIG5ldyBjdXJyZW50IHN1YnRy
ZWUuIFRoaXMgbmV3IHRhcmdldCBpcyBwdXNoZWQgb250byB0aGUgc3RhY2sgaWYgbm90IGFscmVh
ZHkgdGhlcmUuCiAgICAgVmVjdG9yPFN0YWNrT2JqZWN0LCAxPiBtX3N0YWNrOwogCisgICAgLy8g
QWxsb3cgdGVzdHMgdG8gb3ZlcnJpZGUgdGhpcy4KKyAgICB2aXJ0dWFsIEludFJlY3QgbGF5ZXJT
Y2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShjb25zdCBMYXllclR5cGUqKSBjb25zdDsKKwogcHJp
dmF0ZToKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ09jY2x1c2lvblRyYWNrZXJCYXNlKTsK
KyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlOworICAgIGNvbnN0IERhbWFn
ZUNsaWVudFR5cGUqIG1fc3VyZmFjZURhbWFnZUNsaWVudDsKIH07CiAKIHR5cGVkZWYgQ0NPY2Ns
dXNpb25UcmFja2VyQmFzZTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IEND
T2NjbHVzaW9uVHJhY2tlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IDY3OGVjOTY0NTJiMGJhZWQ2ODdh
ZWY2NjY2MmRmM2Q4ZDUxMDVkYTguLjc2NWI0OTFhYzU2OWJlZDE3MDM3ODAxNjIyNzk2MmVlNzNh
M2ZmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNp
b25UcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtNjgsMTcgKzY4LDUxIEBAIHB1YmxpYzoKIC8vIEEg
c3ViY2xhc3MgdG8gZXhwb3NlIHRoZSB0b3RhbCBjdXJyZW50IG9jY2x1c2lvbi4KIGNsYXNzIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXIgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyIHsKIHB1Ymxp
YzoKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyKEludFJlY3Qgc2NyZWVuU2Npc3NvclJlY3Qp
CisgICAgICAgIDogQ0NPY2NsdXNpb25UcmFja2VyKHNjcmVlblNjaXNzb3JSZWN0KQorICAgICAg
ICAsIG1fb3ZlcnJpZGVMYXllclNjaXNzb3JSZWN0KGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAg
ICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyKEludFJlY3Qgc2NyZWVuU2Npc3NvclJlY3QsIGNvbnN0
IENDT2NjbHVzaW9uVHJhY2tlckRhbWFnZUNsaWVudCogZGFtYWdlQ2xpZW50KQorICAgICAgICA6
IENDT2NjbHVzaW9uVHJhY2tlcihzY3JlZW5TY2lzc29yUmVjdCwgZGFtYWdlQ2xpZW50KQorICAg
ICAgICAsIG1fb3ZlcnJpZGVMYXllclNjaXNzb3JSZWN0KGZhbHNlKQorICAgIHsKKyAgICB9CisK
ICAgICBSZWdpb24gb2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpIGNvbnN0IHsgcmV0dXJuIENDT2Nj
bHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW47IH0KICAgICBS
ZWdpb24gb2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gQ0NPY2NsdXNp
b25UcmFja2VyOjptX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldDsgfQogCiAgICAgdm9p
ZCBzZXRPY2NsdXNpb25JblNjcmVlblNwYWNlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKSB7IENDT2Nj
bHVzaW9uVHJhY2tlcjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4gPSByZWdpb247
IH0KICAgICB2b2lkIHNldE9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZShjb25zdCBSZWdpb24mIHJl
Z2lvbikgeyBDQ09jY2x1c2lvblRyYWNrZXI6Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFy
Z2V0ID0gcmVnaW9uOyB9CisKKyAgICB2b2lkIHNldExheWVyU2Npc3NvclJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkgeyBtX292ZXJyaWRlTGF5ZXJTY2lzc29yUmVjdCA9IHRydWU7IG1fbGF5ZXJT
Y2lzc29yUmVjdCA9IHJlY3Q7fQorICAgIHZvaWQgdXNlRGVmYXVsdExheWVyU2Npc3NvclJlY3Qo
KSB7IG1fb3ZlcnJpZGVMYXllclNjaXNzb3JSZWN0ID0gZmFsc2U7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgSW50UmVjdCBsYXllclNjaXNzb3JSZWN0SW5UYXJnZXRTdXJmYWNlKGNvbnN0
IExheWVyQ2hyb21pdW0qIGxheWVyKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlTGF5ZXJTY2lz
c29yUmVjdCA/IG1fbGF5ZXJTY2lzc29yUmVjdCA6IENDT2NjbHVzaW9uVHJhY2tlcjo6bGF5ZXJT
Y2lzc29yUmVjdEluVGFyZ2V0U3VyZmFjZShsYXllcik7IH0KKworcHJpdmF0ZToKKyAgICBib29s
IG1fb3ZlcnJpZGVMYXllclNjaXNzb3JSZWN0OworICAgIEludFJlY3QgbV9sYXllclNjaXNzb3JS
ZWN0OworfTsKKworY2xhc3MgVGVzdERhbWFnZUNsaWVudCA6IHB1YmxpYyBDQ09jY2x1c2lvblRy
YWNrZXJEYW1hZ2VDbGllbnQgeworcHVibGljOgorICAgIC8vIFRoZSBpbnRlcmZhY2UKKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBkYW1hZ2VSZWN0KGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bSop
IGNvbnN0IHsgcmV0dXJuIG1fZGFtYWdlUmVjdDsgfQorCisgICAgLy8gVGVzdGluZyBzdHVmZgor
ICAgIFRlc3REYW1hZ2VDbGllbnQoY29uc3QgRmxvYXRSZWN0JiBkYW1hZ2VSZWN0KSA6IG1fZGFt
YWdlUmVjdChkYW1hZ2VSZWN0KSB7IH0KKyAgICB2b2lkIHNldERhbWFnZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBkYW1hZ2VSZWN0KSB7IG1fZGFtYWdlUmVjdCA9IGRhbWFnZVJlY3Q7IH0KKworcHJp
dmF0ZToKKyAgICBGbG9hdFJlY3QgbV9kYW1hZ2VSZWN0OwogfTsKIAogVEVTVChDQ09jY2x1c2lv
blRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbikKIHsKICAgICAvLyBUaGlz
IHRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgVGVz
dENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQoKSk7CkBAIC05OCw2ICsxMzIsOSBAQCBURVNUKENDT2NjbHVzaW9u
VHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uKQogCiAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAx
MDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJm
YWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVk
QmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAs
IDMwLCA3MCwgNzApLCBvY2NsdXNpb24ub2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgpLmJvdW5kcygp
KTsKQEAgLTExMSw2ICsxNDgsMTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXll
ckFkZGVkVG9PY2NsdWRlZFJlZ2lvbikKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKICAgICBFWFBFQ1Rf
RkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzEsIDcw
LCA3MCkpKTsKIAorICAgIG9jY2x1c2lvbi51c2VEZWZhdWx0TGF5ZXJTY2lzc29yUmVjdCgpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzAsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDI5LCA3MCwgNzAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50
UmVjdCgzMSwgMzAsIDcwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzMSwgNzAsIDcwKSkpOworICAgIG9jY2x1c2lv
bi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworCiAgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzAsIDMwLCA3MCwgNzApKS5pc0VtcHR5KCkpOwogICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoMjksIDMwLCAxLCA3MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOwogICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMjksIDI5LCA3MCwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMjksIDcwLCA3MCkpKTsKQEAgLTEyNSw3ICsx
NzAsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVk
UmVnaW9uKQogVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRl
ZFJlZ2lvbldpdGhSb3RhdGlvbikKIHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJpZ2h0
IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBv
Y2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7
CkBAIC0xNTAsNiArMTk0LDkgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFk
ZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGlvbikKIAogICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAw
MCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAw
MCwgMTAwMCkpOworCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExh
eWVyKGxheWVyLmdldCgpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDMwLCAzMCwgNzAs
IDcwKSwgb2NjbHVzaW9uLm9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKS5ib3VuZHMoKSk7CkBAIC0x
NjMsNiArMjEwLDE0IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRv
T2NjbHVkZWRSZWdpb25XaXRoUm90YXRpb24pCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDMx
LCA3MCwgNzApKSk7CiAKKyAgICBvY2NsdXNpb24udXNlRGVmYXVsdExheWVyU2Npc3NvclJlY3Qo
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCAzMCwgNzAsIDcwKSkpOworICAgIEVYUEVDVF9G
QUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAyOSwgNzAs
IDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCks
IEludFJlY3QoMzEsIDMwLCA3MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgMzEsIDcwLCA3MCkpKTsKKyAgICBvY2Ns
dXNpb24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwog
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDMwLCAzMCwgNzAsIDcwKSkuaXNFbXB0eSgpKTsKICAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDI5LCAzMCwgMSwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyOSwgMzAsIDcwLCA3MCkpKTsKICAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDI5LCAyOSwgNzAsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDI5LCA3MCwgNzApKSk7CkBAIC0xNzcs
NyArMjMyLDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2Ns
dWRlZFJlZ2lvbldpdGhSb3RhdGlvbikKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCiB7CiAgICAgLy8gVGhpcyB0
ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOwpAQCAtMjAwLDYgKzI1NCw5IEBAIFRFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoVHJhbnNsYXRpb24pCiAK
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJ
bnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29y
UmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRh
cmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lv
bi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CiAgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCg1MCwgNTAsIDUwLCA1MCksIG9jY2x1c2lvbi5vY2NsdXNpb25JblNjcmVlblNw
YWNlKCkuYm91bmRzKCkpOwpAQCAtMjEzLDYgKzI3MCwxNCBAQCBURVNUKENDT2NjbHVzaW9uVHJh
Y2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFRyYW5zbGF0aW9uKQogICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUx
LCA1MCwgNTAsIDUwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MSwgNTAsIDUwKSkpOwogCisgICAgb2NjbHVzaW9uLnVz
ZURlZmF1bHRMYXllclNjaXNzb3JSZWN0KCk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDUwLCA1MCkpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNTAs
IDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5n
ZXQoKSwgSW50UmVjdCg1MCwgNDksIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDUxLCA1MCwgNTAsIDUwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAs
IDUxLCA1MCwgNTApKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVj
dCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDUwLCA1MCkpLmlz
RW1wdHkoKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0OSwgNTAsIDEsIDUwKSwgb2Nj
bHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDUw
LCA1MCwgNTApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0OSwgNDksIDUwLCA1MCks
IG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDQ5
LCA0OSwgNTAsIDUwKSkpOwpAQCAtMjIyLDEyICsyODcsMjMgQEAgVEVTVChDQ09jY2x1c2lvblRy
YWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhUcmFuc2xhdGlvbikKICAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDUxLCA1MSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2Nj
bHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDUxLCA1MCwgNTApKSk7
CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgMTAwLCA1MCwgMSksIG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUwLCA1MSwgNTAsIDUw
KSkpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNDksIDUxLCA1MCwgNTApLCBvY2NsdXNp
b24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNTEsIDUw
LCA1MCkpKTsKKworICAgIG9jY2x1c2lvbi51c2VEZWZhdWx0TGF5ZXJTY2lzc29yUmVjdCgpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDUwLCA1MCwgNTAsIDUwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVFf
UkVDVChJbnRSZWN0KDQ5LCA1MCwgMSwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg0OSwgNTAsIDUwLCA1MCkpKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDQ5LCA0OSwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250
ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDksIDQ5LCA1MCwgNTApKSk7CisgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCg1MCwgNDksIDUwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTAsIDQ5LCA1MCwgNTApKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg1MSwgNDksIDQ5LCAxKSwgb2NjbHVzaW9uLnVub2NjbHVk
ZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNTEsIDQ5LCA1MCwgNTApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoNTEsIDUwLCA1MCwgNTApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDUx
LCA1MSwgNTAsIDUwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTEsIDUwLCA1MCkp
LmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCg0OSwgNTEsIDEsIDQ5KSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNDks
IDUxLCA1MCwgNTApKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVj
dCgwLCAwLCAxMDAwLCAxMDAwKSk7CiB9CiAKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZFN1cmZhY2UpCiB7CiAgICAgLy8g
VGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWluZyB1c2VkLgotICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTI1Nyw2ICszMzMsOSBAQCBURVNU
KENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJv
dGF0ZWRTdXJmYWNlKQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJh
Y2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9u
LnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBv
Y2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkp
OwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CiAK
QEAgLTI3MSw2ICszNTAsMTQgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFk
ZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKICAgICBFWFBFQ1RfRkFMU0Uo
b2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYxLCA3MCkp
KTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYwLCA3MSkpKTsKIAorICAgIG9jY2x1c2lvbi51c2VEZWZhdWx0TGF5ZXJT
Y2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5n
ZXQoKSwgSW50UmVjdCgxMCwgNDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwg
NDI5LCA2MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxk
LmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYxLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcxKSkpOwor
ICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMCwgMCwgMTAwMCwgMTAw
MCkpOworCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkLmdldCgp
KTsKICAgICBvY2NsdXNpb24uZmluaXNoZWRUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkLmdldCgp
LCBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtMjgzLDYgKzM3MCwxNiBA
QCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9u
V2l0aFJvdGF0ZWRTdXJmYWNlKQogICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChw
YXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQwLCA3MCwgNjApKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjksIDQwLCA3MCwgNjAp
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMzAsIDM5LCA3MCwgNjApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNU
X0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoMzAsIDQxLCA3
MCwgNjApKSk7CisKKyAgICBvY2NsdXNpb24udXNlRGVmYXVsdExheWVyU2Npc3NvclJlY3QoKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0
KDMwLCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDI5LCA0MCwgNzAsIDYwKSkpOworICAgIEVYUEVDVF9GQUxT
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCAzOSwgNzAsIDYw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMzEsIDQwLCA3MCwgNjApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDEsIDcwLCA2MCkpKTsKKyAgICBvY2NsdXNp
b24uc2V0TGF5ZXJTY2lzc29yUmVjdChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKIAogCiAg
ICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFib3ZlIG9jY2x1c2lvbiBmcm9tIHxsYXllcnw6
CkBAIC0zMTQsNyArNDExLDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFk
ZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhSb3RhdGVkU3VyZmFjZSkKIFRFU1QoQ0NPY2NsdXNpb25U
cmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVhZHlP
blN0YWNrKQogewogICAgIC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBh
cmUgYmVpbmcgdXNlZC4KLSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0z
NTAsNiArNDQ2LDkgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9P
Y2NsdWRlZFJlZ2lvbldpdGhTdXJmYWNlQWxyZWFkeU9uU3RhY2sKIAogICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5n
ZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsK
IAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAw
MCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoLTEw
LCAtMTAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVk
ZWRCZWhpbmRMYXllcihjaGlsZDIuZ2V0KCkpOwogCkBAIC0zNzIsNiArNDcxLDE0IEBAIFRFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3Vy
ZmFjZUFscmVhZHlPblN0YWNrCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChj
aGlsZC5nZXQoKSwgSW50UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzAp
KSk7CiAKKyAgICBvY2NsdXNpb24udXNlRGVmYXVsdExheWVyU2Npc3NvclJlY3QoKTsKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQz
MCwgNjAsIDcwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5n
ZXQoKSwgSW50UmVjdCg5LCA0MzAsIDYwLCA3MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24ub2NjbHVkZWQoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQyOSwgNjAsIDcwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMSwg
NDMwLCA2MCwgNzApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxk
LmdldCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5
ZXJTY2lzc29yUmVjdChJbnRSZWN0KC0xMCwgLTEwLCAxMDAwLCAxMDAwKSk7CisKICAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRS
ZWN0KDEwLCA0MzAsIDYwLCA3MCkpLmlzRW1wdHkoKSk7CiAgICAgLy8gVGhpcyBpcyB0aGUgbGl0
dGxlIHBpZWNlIG5vdCBvY2NsdWRlZCBieSBjaGlsZDIKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDksIDQzMCwgMSwgMTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxk
LmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSkpOwpAQCAtMzg3LDggKzQ5NCwxNiBAQCBU
RVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0
aFN1cmZhY2VBbHJlYWR5T25TdGFjawogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNzAsIDQz
MCwgMSwgNzApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJ
bnRSZWN0KDExLCA0MzAsIDYwLCA3MCkpKTsKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEw
LCA1MDAsIDYwLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQo
KSwgSW50UmVjdCgxMCwgNDMxLCA2MCwgNzApKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBv
Y2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLgotICAgIEVYUEVDVF9FUV9S
RUNUKEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVk
Q29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAsIDQzMCwgNjAsIDcwKSkpOworICAg
IG9jY2x1c2lvbi51c2VEZWZhdWx0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTAs
IDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDcwKSku
aXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDksIDQzMCwgNjAsIDgwKSkuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdldCgp
LCBJbnRSZWN0KC0xMCwgNDMwLCA2MCwgNzApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoLTEw
LCA0MzAsIDYwLCA4MCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50UmVjdCgxMCwgNDI5LCA2MCwgNzAp
KS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVu
dFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMTEsIDQzMCwgNjAsIDcwKSkuaXNFbXB0eSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkLmdl
dCgpLCBJbnRSZWN0KDEwLCA0MzEsIDYwLCA3MCkpLmlzRW1wdHkoKSk7CisgICAgb2NjbHVzaW9u
LnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CiAKICAgICBv
Y2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOwogICAgIC8vIHxj
aGlsZDJ8IHNob3VsZCBnZXQgbWVyZ2VkIHdpdGggdGhlIHN1cmZhY2Ugd2UgYXJlIGxlYXZpbmcg
bm93CkBAIC00MzMsMTAgKzU0OCw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5
ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFscmVhZHlPblN0YWNrCiAgICAgRVhQ
RUNUX0VRX1JFQ1QoSW50UmVjdCgxMDAsIDQwLCAxLCA2MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVk
Q29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMxLCA0MCwgNzAsIDYwKSkpOwogICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMzAsIDEwMCwgNzAsIDEpLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgzMCwgNDEsIDcwLCA2MCkpKTsK
IAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRyYXcgaW50
byBpdHNlbGYuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgNDAsIDcwLCA2MCksIG9j
Y2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVj
dCgzMCwgNDAsIDcwLCA2MCkpKTsKLQotCiAgICAgLyogSnVzdGlmaWNhdGlvbiBmb3IgdGhlIGFi
b3ZlIG9jY2x1c2lvbiBmcm9tIHxsYXllcnw6CiAgICAgICAgICAgICAgICAxMDAKICAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtNDY1LDcgKzU3Niw2IEBAIFRFU1QoQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoU3VyZmFjZUFs
cmVhZHlPblN0YWNrCiAKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJBZGRlZFRv
T2NjbHVkZWRSZWdpb25XaXRoUm90YXRlZE9mZkF4aXNTdXJmYWNlKQogewotICAgIFRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTUwMSw2ICs2MTEsOSBAQCBURVNUKENDT2NjbHVz
aW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0ZWRPZmZB
eGlzU3VyZmFjZQogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tl
ciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNl
dExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICBJbnRS
ZWN0IGNsaXBwZWRMYXllckluQ2hpbGQgPSBsYXllclRyYW5zZm9ybS5tYXBSZWN0KGxheWVyLT52
aXNpYmxlTGF5ZXJSZWN0KCkpOwogCiAgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTUzMCw5ICs2NDMsNiBAQCBURVNUKEND
T2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0aFJvdGF0
ZWRPZmZBeGlzU3VyZmFjZQogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgY2xpcHBlZExheWVySW5DaGlsZCkuaXNFbXB0eSgpKTsK
ICAgICBjbGlwcGVkTGF5ZXJJbkNoaWxkLm1vdmUoMCwgLTEpOwogCi0gICAgLy8gU3VyZmFjZSBp
cyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KLSAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDUwMCwgNTAwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9j
Y2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCksIEludFJlY3QoMCwgMCwgNTAwLCA1MDApKSk7
Ci0KICAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIoY2hpbGQuZ2V0KCkpOwog
ICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQuZ2V0KCksIGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC01NDQsMTUgKzY1NCwxMSBAQCBU
RVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVnaW9uV2l0
aFJvdGF0ZWRPZmZBeGlzU3VyZmFjZQogCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnQuZ2V0KCksIEludFJlY3QoNzUsIDU1LCAxLCAxKSkpOwogICAgIEVYUEVDVF9F
UV9SRUNUKEludFJlY3QoNzUsIDU1LCAxLCAxKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50
UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoNzUsIDU1LCAxLCAxKSkpOwotCi0gICAgLy8gU3Vy
ZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KLSAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgb2NjbHVzaW9uLnN1cmZh
Y2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSkpOwogfQogCiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09j
Y2x1ZGVkUmVnaW9uV2l0aE11bHRpcGxlT3BhcXVlTGF5ZXJzKQogewogICAgIC8vIFRoaXMgaXMg
c2ltaWxhciB0byB0aGUgcHJldmlvdXMgdGVzdCBidXQgbm93IHdlIG1ha2UgYSBmZXcgb3BhcXVl
IGxheWVycyBpbnNpZGUgb2YgfGNoaWxkfCBzbyB0aGF0IHRoZSBvY2NsdWRlZCBwYXJ0cyBvZiBj
aGlsZCBhcmUgbm90IGEgc2ltcGxlIHJlY3QuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBv
Y2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7
CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwpAQCAtNTg1LDYgKzY5MSw5IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwg
bGF5ZXJBZGRlZFRvT2NjbHVkZWRSZWdpb25XaXRoTXVsdGlwbGVPcGFxdWVMYXllcnMpCiAKICAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRS
ZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29yUmVj
dChJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdl
dFJlbmRlclN1cmZhY2UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLm1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyMi5nZXQoKSk7CiAgICAgb2NjbHVzaW9uLm1hcmtP
Y2NsdWRlZEJlaGluZExheWVyKGxheWVyMS5nZXQoKSk7CkBAIC02MDYsOSArNzE1LDYgQEAgVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhN
dWx0aXBsZU9wYXF1ZUxheWVycykKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDcwLCA0MzAs
IDEsIDcwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZC5nZXQoKSwgSW50
UmVjdCgxMSwgNDMwLCA2MCwgNzApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwg
NTAwLCA2MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QoY2hpbGQuZ2V0KCks
IEludFJlY3QoMTAsIDQzMSwgNjAsIDcwKSkpOwogCi0gICAgLy8gU3VyZmFjZSBpcyBub3Qgb2Nj
bHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KLSAgICBFWFBFQ1RfRVFfUkVD
VChJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENv
bnRlbnRSZWN0KGNoaWxkLmdldCgpLCBJbnRSZWN0KDEwLCA0MzAsIDYwLCA3MCkpKTsKLQogICAg
IG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZC5nZXQoKSk7CiAgICAgb2Nj
bHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZC5nZXQoKSwgY2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNl
KHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTYyOCwxMCArNzM0LDYgQEAgVEVTVChDQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LCBsYXllckFkZGVkVG9PY2NsdWRlZFJlZ2lvbldpdGhNdWx0aXBs
ZU9wYXF1ZUxheWVycykKICAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgNDAsIDEsIDYw
KSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3Qo
MzEsIDQwLCA3MCwgNjApKSk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgzMCwgMTAwLCA3
MCwgMSksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDMwLCA0MSwgNzAsIDYwKSkpOwogCi0gICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQg
YnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KDMwLCA0MCwgNzAsIDYwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJl
Y3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDMwLCA0MCwgNzAsIDYwKSkpOwotCi0KICAgICAvKiBK
dXN0aWZpY2F0aW9uIGZvciB0aGUgYWJvdmUgb2NjbHVzaW9uIGZyb20gfGxheWVyMXwgYW5kIHxs
YXllcjJ8OgogCiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTY2MSw3ICs3NjMs
NiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyQWRkZWRUb09jY2x1ZGVkUmVn
aW9uV2l0aE11bHRpcGxlT3BhcXVlTGF5ZXJzKQogVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0
LCBzdXJmYWNlT2NjbHVzaW9uV2l0aE92ZXJsYXBwaW5nU2libGluZ1N1cmZhY2VzKQogewogICAg
IC8vIFRoaXMgdGVzdHMgdGhhdCB0aGUgcmlnaHQgdHJhbnNmb3JtcyBhcmUgYmVpbmcgdXNlZC4K
LSAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbjsKICAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNjk4LDYgKzc5OSw5IEBA
IFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFw
cGluZ1NpYmxpbmdTdXJmYWNlcykKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9j
Y2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoLTEwLCAtMTAsIDEwMDAsIDEwMDAp
KTsKKwogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5k
ZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXll
cjIuZ2V0KCkpOwogCkBAIC03MTIsOSArODE2LDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LCBzdXJmYWNlT2NjbHVzaW9uV2l0aE92ZXJsYXBwaW5nU2libGluZ1N1cmZhY2VzKQogICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAs
IDQyMCwgNjEsIDgwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hp
bGQyLmdldCgpLCBJbnRSZWN0KDAsIDQyMCwgNjAsIDgxKSkpOwogCi0gICAgLy8gU3VyZmFjZSBp
cyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KLSAgICBFWFBF
Q1RfRVFfUkVDVChJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9j
Y2x1ZGVkQ29udGVudFJlY3QoY2hpbGQyLmdldCgpLCBJbnRSZWN0KDAsIDQyMCwgNjAsIDgwKSkp
OwotCiAgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMi5nZXQoKSk7
CiAgICAgb2NjbHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDIuZ2V0KCks
IGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtNzMyLDkgKzgzMyw2IEBA
IFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFw
cGluZ1NpYmxpbmdTdXJmYWNlcykKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcxLCA3MCkpKTsKICAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3
MSkpKTsKIAotICAgIC8vIFN1cmZhY2UgaXMgbm90IG9jY2x1ZGVkIGJ5IHRoaW5ncyB0aGF0IGRy
YXcgaW50byBpdHNlbGYsIGJ1dCB0aGUgfGNoaWxkMXwgc3VyZmFjZSBzaG91bGQgYmUgb2NjbHVk
ZWQgYnkgdGhlIHxjaGlsZDJ8IHN1cmZhY2UuCi0gICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgw
LCA0MzAsIDEwLCA3MCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNo
aWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA3MCkpKTsKLQogICAgIG9jY2x1c2lvbi5t
YXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDEuZ2V0KCkpOwogICAgIG9jY2x1c2lvbi5maW5p
c2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQxLmdldCgpLCBjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKSk7CiAgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTc1NCwxMCArODUyLDYgQEAgVEVTVChDQ09jY2x1c2lvblRy
YWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uV2l0aE92ZXJsYXBwaW5nU2libGluZ1N1cmZhY2Vz
KQogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRS
ZWN0KDE5LCA0MCwgODAsIDYwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwLCAzOSwgODAsIDYwKSkpOwogCi0gICAgLy8gfGNo
aWxkMXwgYW5kIHxjaGlsZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBu
b3Qgb2NjbHVkZSBpdC4KLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAzMCwgODAsIDcw
KSwgb2NjbHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDIwLCAzMCwgODAsIDcwKSkpOwotCi0KICAgICAvKiBKdXN0aWZpY2F0aW9uIGZvciB0
aGUgYWJvdmUgb2NjbHVzaW9uOgogICAgICAgICAgICAgICAgMTAwCiAgICAgICArLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKwpAQCAtNzg3LDcgKzg4MSw2IEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgc3VyZmFjZU9jY2x1c2lvbldpdGhPdmVybGFwcGluZ1NpYmxpbmdTdXJmYWNlcykKIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2Up
CiB7CiAgICAgLy8gVGhpcyB0ZXN0cyB0aGF0IHRoZSByaWdodCB0cmFuc2Zvcm1zIGFyZSBiZWlu
ZyB1c2VkLgotICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uOwogICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gY2hpbGQxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC04MzEsNiAr
OTI0LDkgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5T
Y3JlZW5TcGFjZSkKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAorICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1c2lvbi5z
ZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoLTIwLCAtMjAsIDEwMDAsIDEwMDApKTsKKwogICAg
IG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLT5yZW5kZXJTdXJmYWNl
KCkpOwogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllcjIuZ2V0KCkp
OwogCkBAIC04NDUsOSArOTQxLDEzIEBAIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3Vy
ZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5v
Y2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEwLCA0MjAsIDcxLCA4MCkpKTsKICAgICBF
WFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAs
IDQyMCwgNzAsIDgxKSkpOwogCi0gICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhp
bmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0x
MCwgNDIwLCA3MCwgODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChj
aGlsZDIuZ2V0KCksIEludFJlY3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoMzAsIDI1
MCwgMSwgMSkpKTsKKyAgICBvY2NsdXNpb24udXNlRGVmYXVsdExheWVyU2Npc3NvclJlY3QoKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgpLCBJbnRSZWN0
KC0xMCwgNDIwLCA3MCwgODApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTEsIDQyMCwgNzAsIDgwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEwLCA0MTksIDcw
LCA4MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQyLmdldCgp
LCBJbnRSZWN0KC0xMCwgNDIwLCA3MSwgODApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVjdCgtMTAsIDQyMCwgNzAsIDgxKSkpOworICAg
IG9jY2x1c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoLTIwLCAtMjAsIDEwMDAsIDEw
MDApKTsKIAogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihjaGlsZDIuZ2V0
KCkpOwogICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZhY2UoY2hpbGQyLmdl
dCgpLCBjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CkBAIC04NjYsMTQgKzk2Niw2IEBAIFRFU1Qo
Q0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2UpCiAg
ICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJlY3Qo
LTEwLCA0MzAsIDgxLCA3MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVk
KGNoaWxkMS5nZXQoKSwgSW50UmVjdCgtMTAsIDQzMCwgODAsIDcxKSkpOwogCi0gICAgLy8gU3Vy
ZmFjZSBpcyBub3Qgb2NjbHVkZWQgYnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZiwgYnV0
IHRoZSB8Y2hpbGQxfCBzdXJmYWNlIHNob3VsZCBiZSBvY2NsdWRlZCBieSB0aGUgfGNoaWxkMnwg
c3VyZmFjZS4KLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KC0xMCwgNDMwLCAxMCwgODApLCBv
Y2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50UmVjdChjaGlsZDEuZ2V0KCksIEludFJl
Y3QoLTEwLCA0MzAsIDcwLCA4MCkpKTsKLSAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24uc3VyZmFj
ZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MzAsIDcwLCA4MCkpKTsKLSAgICBF
WFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJl
Y3QoLTEsIDQzMCwgNzAsIDgwKSkpOwotICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFj
ZU9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCgwLCA0MjksIDcwLCA4MCkpKTsKLSAgICBF
WFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDEuZ2V0KCksIEludFJl
Y3QoMSwgNDMwLCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNl
T2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDAsIDQzMSwgNzAsIDgwKSkpOwotCiAgICAg
b2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGNoaWxkMS5nZXQoKSk7CiAgICAgb2Nj
bHVzaW9uLmZpbmlzaGVkVGFyZ2V0UmVuZGVyU3VyZmFjZShjaGlsZDEuZ2V0KCksIGNoaWxkMS0+
cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtODkzLDExICs5ODUsNiBAQCBURVNUKEND
T2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNwYWNlKQogICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50LmdldCgpLCBJbnRSZWN0KDE5
LCAzMCwgODAsIDcwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDIwLCAyOSwgODAsIDcwKSkpOwogCi0gICAgLy8gfGNoaWxkMXwg
YW5kIHxjaGlsZDJ8IGJvdGggZHJhdyBpbnRvIHBhcmVudCBzbyB0aGV5IHNob3VsZCBub3Qgb2Nj
bHVkZSBpdC4KLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwLCAyMCwgODAsIDgwKSwgb2Nj
bHVzaW9uLnN1cmZhY2VVbm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDIwLCAyMCwgODAsIDgwKSkpOwotICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24uc3VyZmFjZU9j
Y2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg1MCwgNTAsIDEsIDEpKSk7Ci0KLQogICAgIC8q
IEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvY2NsdXNpb246CiAgICAgICAgICAgICAgICAx
MDAKICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC05MjYsNyArMTAxMyw2IEBAIFRF
U1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc3VyZmFjZU9jY2x1c2lvbkluU2NyZWVuU3BhY2Up
CiBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNjcmVlblNw
YWNlRGlmZmVyZW50VHJhbnNmb3JtcykKIHsKICAgICAvLyBUaGlzIHRlc3RzIHRoYXQgdGhlIHJp
Z2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgVGVzdENDT2NjbHVzaW9uVHJhY2tl
ciBvY2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKQEAgLTk3NSw2ICsxMDYxLDkgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0LCBzdXJmYWNlT2NjbHVzaW9uSW5TY3JlZW5TcGFjZURpZmZlcmVudFRyYW5zZm9ybXMpCiAK
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CiAKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJ
bnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApKTsKKyAgICBvY2NsdXNpb24uc2V0TGF5ZXJTY2lzc29y
UmVjdChJbnRSZWN0KC0zMCwgLTMwLCAxMDAwLCAxMDAwKSk7CisKICAgICBvY2NsdXNpb24uZW50
ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBvY2Ns
dXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIyLmdldCgpKTsKIApAQCAtOTg5LDEw
ICsxMDc4LDYgQEAgVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBzdXJmYWNlT2NjbHVzaW9u
SW5TY3JlZW5TcGFjZURpZmZlcmVudFRyYW5zZm9ybXMpCiAgICAgRVhQRUNUX0ZBTFNFKG9jY2x1
c2lvbi5vY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEwLCA0MjAsIDcxLCA4MCkpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMi5nZXQoKSwgSW50UmVj
dCgtMTAsIDQyMCwgNzAsIDgxKSkpOwogCi0gICAgLy8gU3VyZmFjZSBpcyBub3Qgb2NjbHVkZWQg
YnkgdGhpbmdzIHRoYXQgZHJhdyBpbnRvIGl0c2VsZi4KLSAgICBFWFBFQ1RfRVFfUkVDVChJbnRS
ZWN0KC0xMCwgNDIwLCA3MCwgODApLCBvY2NsdXNpb24uc3VyZmFjZVVub2NjbHVkZWRDb250ZW50
UmVjdChjaGlsZDIuZ2V0KCksIEludFJlY3QoLTEwLCA0MjAsIDcwLCA4MCkpKTsKLSAgICBFWFBF
Q1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChjaGlsZDIuZ2V0KCksIEludFJlY3Qo
MzAsIDI1MCwgMSwgMSkpKTsKLQogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihjaGlsZDIuZ2V0KCkpOwogICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZh
Y2UoY2hpbGQyLmdldCgpLCBjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9u
LmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAg
LTEwMTAsMTYgKzEwOTUsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VP
Y2NsdXNpb25JblNjcmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykKICAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGNoaWxkMS5nZXQoKSwgSW50UmVjdCg0MjAsIC0xOSwgODAs
IDkwKSkpOwogICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQoY2hpbGQxLmdldCgp
LCBJbnRSZWN0KDQyMSwgLTIwLCA4MCwgOTApKSk7CiAKLSAgICAvLyBTdXJmYWNlIGlzIG5vdCBv
Y2NsdWRlZCBieSB0aGluZ3MgdGhhdCBkcmF3IGludG8gaXRzZWxmLCBidXQgdGhlIHxjaGlsZDF8
IHN1cmZhY2Ugc2hvdWxkIGJlIG9jY2x1ZGVkIGJ5IHRoZSB8Y2hpbGQyfCBzdXJmYWNlLgotICAg
IEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNDIwLCAtMjAsIDgwLCA5MCksIG9jY2x1c2lvbi5zdXJm
YWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQoKSwgSW50UmVjdCg0MjAsIC0yMCwg
ODAsIDkwKSkpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNDkwLCAtMTAsIDEwLCA4MCks
IG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNoaWxkMS5nZXQoKSwgSW50
UmVjdCg0MjAsIC0xMCwgODAsIDgwKSkpOwotICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNDIw
LCAtMjAsIDcwLCAxMCksIG9jY2x1c2lvbi5zdXJmYWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNo
aWxkMS5nZXQoKSwgSW50UmVjdCg0MjAsIC0yMCwgNzAsIDkwKSkpOwotICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMCwgLTEw
LCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQo
Y2hpbGQxLmdldCgpLCBJbnRSZWN0KDQxOSwgLTEwLCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMCwg
LTExLCA3MCwgODApKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVk
ZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQyMSwgLTEwLCA3MCwgODApKSk7Ci0gICAgRVhQRUNU
X0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQoY2hpbGQxLmdldCgpLCBJbnRSZWN0KDQy
MCwgLTksIDcwLCA4MCkpKTsKLQogICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXll
cihjaGlsZDEuZ2V0KCkpOwogICAgIG9jY2x1c2lvbi5maW5pc2hlZFRhcmdldFJlbmRlclN1cmZh
Y2UoY2hpbGQxLmdldCgpLCBjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgb2NjbHVzaW9u
LmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAg
LTEwMzUsMTQgKzExMTAsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VP
Y2NsdXNpb25JblNjcmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykKICAgICBFWFBFQ1RfRkFM
U0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMSwgMjAsIDkwLCA4
MCkpKTsKICAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudC5nZXQoKSwg
SW50UmVjdCgxMCwgMjEsIDkwLCA4MCkpKTsKIAotICAgIC8vIHxjaGlsZDF8IGFuZCB8Y2hpbGQy
fCBib3RoIGRyYXcgaW50byBwYXJlbnQgc28gdGhleSBzaG91bGQgbm90IG9jY2x1ZGUgaXQuCi0g
ICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMCwgMjAsIDkwLCA4MCksIG9jY2x1c2lvbi5zdXJm
YWNlVW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMCwgMjAsIDkw
LCA4MCkpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLnN1cmZhY2VPY2NsdWRlZChwYXJl
bnQuZ2V0KCksIEludFJlY3QoMTAsIDIwLCAxLCAxKSkpOwotICAgIEVYUEVDVF9GQUxTRShvY2Ns
dXNpb24uc3VyZmFjZU9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg5OSwgMjAsIDEsIDEp
KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5zdXJmYWNlT2NjbHVkZWQocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDEwLCA5LCAxLCAxKSkpOwotICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24u
c3VyZmFjZU9jY2x1ZGVkKHBhcmVudC5nZXQoKSwgSW50UmVjdCg5OSwgOTksIDEsIDEpKSk7Ci0K
LQogICAgIC8qIEp1c3RpZmljYXRpb24gZm9yIHRoZSBhYm92ZSBvY2NsdXNpb246CiAgICAgICAg
ICAgICAgICAxMDAKICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xMDcxLDcgKzEx
MzgsNiBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHN1cmZhY2VPY2NsdXNpb25JblNj
cmVlblNwYWNlRGlmZmVyZW50VHJhbnNmb3JtcykKIFRFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVz
dCwgb2NjbHVzaW9uSW50ZXJhY3Rpb25XaXRoRmlsdGVycykKIHsKICAgICAvLyBUaGlzIHRlc3Rz
IHRoYXQgdGhlIHJpZ2h0IHRyYW5zZm9ybXMgYXJlIGJlaW5nIHVzZWQuCi0gICAgVGVzdENDT2Nj
bHVzaW9uVHJhY2tlciBvY2NsdXNpb247CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gYmx1ckxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOwpAQCAtMTEyMSw2ICsxMTg3LDkgQEAgVEVTVChDQ09jY2x1c2lv
blRyYWNrZXJUZXN0LCBvY2NsdXNpb25JbnRlcmFjdGlvbldpdGhGaWx0ZXJzKQogCiAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOwogCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgw
LCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50
UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisKICAgICAvLyBPcGFjaXR5IGxheWVyIHdvbid0IGNv
bnRyaWJ1dGUgdG8gb2NjbHVzaW9uLgogICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1
cmZhY2Uob3BhY2l0eUxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIG9jY2x1c2lvbi5tYXJr
T2NjbHVkZWRCZWhpbmRMYXllcihvcGFjaXR5TGF5ZXIuZ2V0KCkpOwpAQCAtMTE3MCw0ICsxMjM5
LDc3OCBAQCBURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIG9jY2x1c2lvbkludGVyYWN0aW9u
V2l0aEZpbHRlcnMpCiAgICAgRVhQRUNUX0VRKDF1LCBvY2NsdXNpb24ub2NjbHVzaW9uSW5UYXJn
ZXRTdXJmYWNlKCkucmVjdHMoKS5zaXplKCkpOwogfQogCitURVNUKENDT2NjbHVzaW9uVHJhY2tl
clRlc3QsIGxheWVyU2Npc3NvclJlY3RPdmVyVGlsZSkKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+
YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZp
bHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBh
cmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZp
bHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAw
LCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15
TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7
CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQp
OworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1
bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNp
b24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Np
c3NvclJlY3QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5l
bnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdl
dCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEw
MCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVk
KGxheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1
c2lvbi51c2VEZWZhdWx0TGF5ZXJTY2lzc29yUmVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7
CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgyMDAsIDEwMCwgMTAw
LCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5n
ZXQoKSk7CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNl
KHBhcmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwg
SW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKwor
ICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEw
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDAsIDAsIDMwMCwgMzAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNj
cmVlblNjaXNzb3JSZWN0T3ZlclRpbGUpCit7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxk
KGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXll
ci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsK
KworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2lu
dCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBh
cmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50KTsKKworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVzaW9uKEludFJl
Y3QoMjAwLCAxMDAsIDEwMCwgMTAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5k
ZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgx
MDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChs
YXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAx
MDApKSk7CisKKyAgICAvLyBPY2NsdWRlZCBzaW5jZSBpdHMgb3V0c2lkZSB0aGUgc3VyZmFjZSBi
b3VuZHMuCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJ
bnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIC8vIFRlc3Qgd2l0aG91dCBhbnkg
c2Npc3NvcnMuCisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCgwLCAw
LCAxMDAwLCAxMDAwKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXll
ci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgb2NjbHVzaW9uLnVz
ZURlZmF1bHRMYXllclNjaXNzb3JSZWN0KCk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVk
QmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVu
ZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVy
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQo
cGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAw
LCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
RkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwg
MTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMjAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50
TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDIw
MCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZh
Y2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVj
dCgyMDAsIDEwMCwgMTAwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKK30KKworVEVTVChDQ09jY2x1
c2lvblRyYWNrZXJUZXN0LCBsYXllclNjaXNzb3JSZWN0T3ZlckN1bGxlZFRpbGUpCit7CisgICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9w
dFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVy
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMg
ZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXll
ci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUp
OworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0
OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFy
ZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3RDQ09jY2x1c2lv
blRyYWNrZXIgb2NjbHVzaW9uKEludFJlY3QoMCwgMCwgMTAwMCwgMTAwMCkpOworICAgIG9jY2x1
c2lvbi5zZXRMYXllclNjaXNzb3JSZWN0KEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSk7CisK
KyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgp
LCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIu
Z2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1h
cmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVU
b1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1
c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0
KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9u
Lm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJ
bnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50
UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDIwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgw
LCAwLCAzMDAsIDMwMCkpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdCwgc2NyZWVuU2Npc3NvclJlY3RPdmVyQ3VsbGVkVGlsZSkKK3sKKyAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVu
ZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOwor
ICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOwor
ICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0
ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNp
emUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhs
YXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5k
cygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBv
Y2NsdXNpb24oSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5l
bnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBF
WFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdl
dCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgx
MDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVoaW5k
TGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3Vy
ZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0
UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50
TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAwLCAx
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5
ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUo
b2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDIwMCwgMTAw
LCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVy
LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAyMDAsIDEw
MCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9j
Y2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSku
aXNFbXB0eSgpKTsKK30KKworVEVTVChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBsYXllclNjaXNz
b3JSZWN0T3ZlclBhcnRpYWxUaWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQo
bGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3Bl
cmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVy
LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwor
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAw
KSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVy
ZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFy
ZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRz
KCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVj
dCgwLCAwLCAxMDAwLCAxMDAwKSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3Qo
SW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRS
ZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0ZBTFNF
KG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkp
KTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRS
ZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2Ns
dWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVD
VF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAs
IDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxh
eWVyLmdldCgpKTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1
cmZhY2UocGFyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdl
dCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgp
LCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEw
MCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdl
dCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1
c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0
KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAyMDAsIDEwMCwg
MTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUw
LCAyMDAsIDIwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgp
LCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3Qo
MjAwLCA1MCwgNTAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29u
dGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDUwKSwgb2NjbHVzaW9uLnVu
b2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwg
MTAwKSkpOworfQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIHNjcmVlblNjaXNzb3JS
ZWN0T3ZlclBhcnRpYWxUaWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5
ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0
aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVh
dGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5z
ZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwg
SW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAs
IDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50
LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkp
KTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
cGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOworCisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCg1
MCwgNTAsIDIwMCwgMjAwKSk7CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJm
YWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lv
bi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBF
WFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEw
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXll
ci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShv
Y2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAw
KSkpOworCisgICAgb2NjbHVzaW9uLm1hcmtPY2NsdWRlZEJlaGluZExheWVyKGxheWVyLmdldCgp
KTsKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UocGFy
ZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAg
RVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0
KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1
ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2Ns
dWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAyMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJl
Y3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSkpOwor
CisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoNTAsIDUwLCAyMDAsIDIw
MCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0
KDAsIDAsIDMwMCwgMzAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMjAwLCA1MCwg
NTAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIElu
dFJlY3QoMCwgMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAs
IDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50Lmdl
dCgpLCBJbnRSZWN0KDAsIDEwMCwgMzAwLCAxMDApKSk7CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgyMDAsIDEwMCwgNTAsIDEwMCksIG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3Qo
cGFyZW50LmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
RVFfUkVDVChJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDUwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOwor
fQorCitURVNUKENDT2NjbHVzaW9uVHJhY2tlclRlc3QsIGxheWVyU2Npc3NvclJlY3RPdmVyTm9U
aWxlcykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJl
bnRMYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxh
eWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hp
bGQocGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmls
dGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRl
cnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMw
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVy
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIw
MCwgMjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
ZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAg
ICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBw
YXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAg
VGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAw
KSk7CisgICAgb2NjbHVzaW9uLnNldExheWVyU2Npc3NvclJlY3QoSW50UmVjdCg1MDAsIDUwMCwg
MTAwLCAxMDApKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5
ZXItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVk
ZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJ
bnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9j
Y2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAg
IG9jY2x1c2lvbi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2Nj
bHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBh
cmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAs
IDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRM
YXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAwLCAx
MDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5
ZXIuZ2V0KCksIEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEw
MCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXll
ci5nZXQoKSwgSW50UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24u
bGVhdmVUb1RhcmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0
KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVF
KG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAs
IDAsIDMwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5v
Y2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAw
KSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKS5pc0VtcHR5
KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFy
ZW50LmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7Cit9CisK
K1RFU1QoQ0NPY2NsdXNpb25UcmFja2VyVGVzdCwgc2NyZWVuU2Npc3NvclJlY3RPdmVyTm9UaWxl
cykKK3sKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRM
YXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgp
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVy
ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwor
ICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQo
cGFyZW50TGF5ZXIpOworICAgIHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVy
T3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRSkpOworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMp
OworICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwMCwg
MjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVt
bXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgVGVz
dENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCg1MDAsIDUwMCwgMTAwLCAxMDAp
KTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRl
clN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIu
Z2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7Cisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEw
MCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxh
eWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIG9jY2x1c2lv
bi5tYXJrT2NjbHVkZWRCZWhpbmRMYXllcihsYXllci5nZXQoKSk7CisgICAgb2NjbHVzaW9uLmxl
YXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBv
Y2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudExheWVyLT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVy
LmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1
c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAw
KSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQo
KSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDAp
KSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgp
LCBJbnRSZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNp
b24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCks
IEludFJlY3QoMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwg
SW50UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVUb1Rh
cmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMCwgMCwgMzAwLCAzMDApKS5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lv
bi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwg
MTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENv
bnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDMwMCwgMTAwKSkuaXNFbXB0
eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBh
cmVudC5nZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgp
LCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdCwgbGF5ZXJTY2lzc29yUmVjdEZvckxheWVyT2ZmT3JpZ2luKQor
eworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVy
ID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAg
cGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJl
bnRMYXllcik7CisgICAgcGFyZW50LT5hZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVy
YXRpb25zIGZpbHRlcnM7CisgICAgZmlsdGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFKSk7CisgICAgcGFyZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7Cisg
ICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMTAwLCAxMDApLCBJbnRTaXplKDIwMCwg
MjAwKSwgdHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVt
bXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBw
YXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgVGVz
dENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSk7
CisKKyAgICBvY2NsdXNpb24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJT
dXJmYWNlKCkpOworCisgICAgLy8gVGhpcyBsYXllciBpcyB0cmFuc2xhdGVkIHdoZW4gZHJhd24g
aW50byBpdHMgdGFyZ2V0LiBTbyBpZiB0aGUgc2Npc3NvciByZWN0IGdpdmVuIGZyb20gdGhlIHRh
cmdldCBzdXJmYWNlCisgICAgLy8gaXMgbm90IGluIHRoYXQgdGFyZ2V0IHNwYWNlLCB0aGVuIGFm
dGVyIHRyYW5zbGF0aW5nIHRoZXNlIHF1ZXJ5IHJlY3RzIGludG8gdGhlIHRhcmdldCwgdGhleSB3
aWxsIGZhbGwgb3V0c2lkZQorICAgIC8vIHRoZSBzY2lzc29yIGFuZCBiZSBjb25zaWRlcmVkIG9j
Y2x1ZGVkLgorICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCks
IEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5v
Y2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVY
UEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVy
LmdldCgpLCBJbnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKK30KKworVEVTVChDQ09jY2x1
c2lvblRyYWNrZXJUZXN0LCBkYW1hZ2VSZWN0T3ZlclRpbGUpCit7CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0UmVmKG5ldyBMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExheWVyKTsKKyAgICBwYXJl
bnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAg
ICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEUpKTsKKyAg
ICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVy
cyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXpl
KDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5
ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRydWUpOworCisgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBk
dW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50LT5ib3VuZHMo
KSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBw
YXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFy
ZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3REYW1hZ2VDbGllbnQgZGFtYWdlKEZs
b2F0UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKTsKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2Vy
IG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApLCAmZGFtYWdlKTsKKworICAgIG9j
Y2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5ZXIuZ2V0KCksIEludFJl
Y3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVk
KGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJ
bnRSZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKworICAgIC8vIE91dHNpZGUgdGhlIGxheWVy
J3MgY2xpcCByZWN0LgorICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5n
ZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFy
a09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRv
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQo
KSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIElu
dFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRS
ZWN0KDIwMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCkpKTsKKyAg
ICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJl
Y3QoMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVk
ZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAyMDAsIDEwMCwgMTAwKSkpOworICAg
IEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVj
dCgyMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVUb1RhcmdldFJl
bmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDMwMCkpKTsKK30KKworVEVT
VChDQ09jY2x1c2lvblRyYWNrZXJUZXN0LCBkYW1hZ2VSZWN0T3ZlckN1bGxlZFRpbGUpCit7Cisg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gcGFyZW50TGF5ZXIgPSBh
ZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsYXllciA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBwYXJl
bnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHBhcmVudExh
eWVyKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGxheWVyKTsKKworICAgIEZpbHRlck9wZXJhdGlv
bnMgZmlsdGVyczsKKyAgICBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEUpKTsKKyAgICBwYXJlbnRMYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBs
YXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMzAwLCAzMDApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnRMYXllci5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50
KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgyMDAsIDIwMCksIHRy
dWUpOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworCisgICAgcGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
cGFyZW50LT5ib3VuZHMoKSkpOworICAgIHBhcmVudC0+c2V0Q2xpcFJlY3QoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocGFyZW50KTsKKworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKworICAgIFRlc3REYW1hZ2VD
bGllbnQgZGFtYWdlKEZsb2F0UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKTsKKyAgICBUZXN0Q0NP
Y2NsdXNpb25UcmFja2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApLCAmZGFt
YWdlKTsKKworICAgIG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJl
bmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQobGF5
ZXIuZ2V0KCksIEludFJlY3QoMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAsIDEwMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0
KDEwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRl
ZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2Ns
dXNpb24ubWFya09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lv
bi5sZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgb2NjbHVzaW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVy
U3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRM
YXllci5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShv
Y2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAs
IDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIu
Z2V0KCksIEludFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwg
MTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5n
ZXQoKSwgSW50UmVjdCgyMDAsIDEwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2Nj
bHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAx
MDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdl
dCgpLCBJbnRSZWN0KDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVz
aW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEw
MCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0
KCksIEludFJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZl
VG9UYXJnZXRSZW5kZXJTdXJmYWNlKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi51bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJ
bnRSZWN0KDAsIDAsIDMwMCwgMzAwKSkuaXNFbXB0eSgpKTsKK30KKworVEVTVChDQ09jY2x1c2lv
blRyYWNrZXJUZXN0LCBkYW1hZ2VSZWN0T3ZlclBhcnRpYWxUaWxlcykKK3sKKyAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBwYXJlbnRMYXllciA9IGFkb3B0UmVmKG5l
dyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxheWVyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIHBhcmVudC0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQocGFyZW50TGF5ZXIpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQobGF5ZXIpOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJz
OworICAgIGZpbHRlcnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMC41LCBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRSkp
OworICAgIHBhcmVudExheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRG
aWx0ZXJzKGZpbHRlcnMpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAw
KSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAsIDMwMCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIElu
dFNpemUoMzAwLCAzMDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDIwMCwgMjAwKSwgdHJ1ZSk7CisKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
KyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAg
aW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisKKyAgICBwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBwYXJlbnQtPmJv
dW5kcygpKSk7CisgICAgcGFyZW50LT5zZXRDbGlwUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVu
ZChwYXJlbnQpOworCisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworCisgICAgVGVzdERhbWFnZUNsaWVudCBkYW1h
Z2UoRmxvYXRSZWN0KDUwLCA1MCwgMjAwLCAyMDApKTsKKyAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1c2lvbihJbnRSZWN0KDAsIDAsIDEwMDAsIDEwMDApLCAmZGFtYWdlKTsKKworICAg
IG9jY2x1c2lvbi5lbnRlclRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJ
bnRSZWN0KDAsIDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2Nj
bHVkZWQobGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5n
ZXQoKSwgSW50UmVjdCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFy
a09jY2x1ZGVkQmVoaW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRv
VGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVz
aW9uLmVudGVyVGFyZ2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgp
KTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQo
KSwgSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIElu
dFJlY3QoMTAwLCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2Nj
bHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOwor
ICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIElu
dFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9GQUxTRShvY2NsdXNpb24u
b2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAwLCAxMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfRkFMU0Uob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJ
bnRSZWN0KDAsIDIwMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5v
Y2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7
CisgICAgRVhQRUNUX0ZBTFNFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwg
SW50UmVjdCgyMDAsIDIwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubGVhdmVUb1Rh
cmdldFJlbmRlclN1cmZhY2UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMjAwKSwgb2NjbHVzaW9uLnVub2NjbHVkZWRD
b250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMCwgMzAwLCAzMDApKSk7CisgICAg
RVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgyMDAsIDUwLCA1MCwgNTApLCBvY2NsdXNpb24udW5vY2Ns
dWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkpKTsK
KyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCA1MCwgMTAwKSwgb2NjbHVzaW9u
LnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAs
IDEwMCkpKTsKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDIwMCwgMTAwLCA1MCwgMTAwKSwg
b2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJlY3QoMjAw
LCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAwLCAyMDAs
IDEwMCwgNTApLCBvY2NsdXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwg
SW50UmVjdCgxMDAsIDIwMCwgMTAwLCAxMDApKSk7Cit9CisKK1RFU1QoQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdCwgZGFtYWdlUmVjdE92ZXJOb1RpbGVzKQoreworICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQ+IHBhcmVudExheWVyID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChwYXJlbnRMYXllcik7CisgICAgcGFyZW50LT5h
ZGRDaGlsZChsYXllcik7CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgZmls
dGVycy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZSgwLjUsIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFKSk7CisgICAgcGFy
ZW50TGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmls
dGVycyk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBv
aW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMDAs
IDMwMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMCwgMCksIEludFNpemUoMjAwLCAyMDApLCB0cnVlKTsKKworICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKKworICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHBhcmVudC0+Ym91bmRzKCkpKTsK
KyAgICBwYXJlbnQtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcGFyZW50
LT5ib3VuZHMoKSkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHBhcmVudCk7
CisKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBUZXN0RGFtYWdlQ2xpZW50IGRhbWFnZShGbG9hdFJl
Y3QoNTAwLCA1MDAsIDEwMCwgMTAwKSk7CisgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2Ns
dXNpb24oSW50UmVjdCgwLCAwLCAxMDAwLCAxMDAwKSwgJmRhbWFnZSk7CisKKyAgICBvY2NsdXNp
b24uZW50ZXJUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworCisg
ICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKGxheWVyLmdldCgpLCBJbnRSZWN0KDAs
IDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXll
ci5nZXQoKSwgSW50UmVjdCgwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9UUlVFKG9j
Y2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVjdCgxMDAsIDAsIDEwMCwgMTAwKSkp
OworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChsYXllci5nZXQoKSwgSW50UmVj
dCgxMDAsIDEwMCwgMTAwLCAxMDApKSk7CisKKyAgICBvY2NsdXNpb24ubWFya09jY2x1ZGVkQmVo
aW5kTGF5ZXIobGF5ZXIuZ2V0KCkpOworICAgIG9jY2x1c2lvbi5sZWF2ZVRvVGFyZ2V0UmVuZGVy
U3VyZmFjZShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgb2NjbHVzaW9uLmVudGVyVGFy
Z2V0UmVuZGVyU3VyZmFjZShwYXJlbnRMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVY
UEVDVF9UUlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFy
ZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMCwgMTAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAw
LCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50
TGF5ZXIuZ2V0KCksIEludFJlY3QoMTAwLCAxMDAsIDEwMCwgMTAwKSkpOworICAgIEVYUEVDVF9U
UlVFKG9jY2x1c2lvbi5vY2NsdWRlZChwYXJlbnRMYXllci5nZXQoKSwgSW50UmVjdCgyMDAsIDEw
MCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVu
dExheWVyLmdldCgpLCBJbnRSZWN0KDIwMCwgMCwgMTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RS
VUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExheWVyLmdldCgpLCBJbnRSZWN0KDAsIDIwMCwg
MTAwLCAxMDApKSk7CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLm9jY2x1ZGVkKHBhcmVudExh
eWVyLmdldCgpLCBJbnRSZWN0KDEwMCwgMjAwLCAxMDAsIDEwMCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShvY2NsdXNpb24ub2NjbHVkZWQocGFyZW50TGF5ZXIuZ2V0KCksIEludFJlY3QoMjAwLCAyMDAs
IDEwMCwgMTAwKSkpOworCisgICAgb2NjbHVzaW9uLmxlYXZlVG9UYXJnZXRSZW5kZXJTdXJmYWNl
KHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKG9jY2x1c2lvbi51
bm9jY2x1ZGVkQ29udGVudFJlY3QocGFyZW50LmdldCgpLCBJbnRSZWN0KDAsIDAsIDMwMCwgMzAw
KSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2NsdXNpb24udW5vY2NsdWRlZENvbnRl
bnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgwLCAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQu
Z2V0KCksIEludFJlY3QoMCwgMTAwLCAzMDAsIDEwMCkpLmlzRW1wdHkoKSk7CisgICAgRVhQRUNU
X1RSVUUob2NjbHVzaW9uLnVub2NjbHVkZWRDb250ZW50UmVjdChwYXJlbnQuZ2V0KCksIEludFJl
Y3QoMjAwLCAxMDAsIDEwMCwgMTAwKSkuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShvY2Ns
dXNpb24udW5vY2NsdWRlZENvbnRlbnRSZWN0KHBhcmVudC5nZXQoKSwgSW50UmVjdCgxMDAsIDIw
MCwgMTAwLCAxMDApKS5pc0VtcHR5KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>