<?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>109302</bug_id>
          
          <creation_ts>2013-02-08 07:33:52 -0800</creation_ts>
          <short_desc>Simplify logic for automatically opting into composited scrolling</short_desc>
          <delta_ts>2014-03-17 07:20:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>109965</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to name="Glenn Hartmann">hartmanng</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dtrebbien</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>828558</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2013-02-08 07:33:52 -0800</bug_when>
    <thetext>The current method uses an understanding of the stacking order to predict if a promotion will affect it. This is unfortunate for a couple of reasons. Stacking is complex, and it&apos;s difficult to guarantee correctness. Also, if the &apos;real&apos; stacking logic changes the opt-in logic will break, so the current approach is brittle.

A much simpler approach would be to just do a test promotion and check if the stacking order changed. This increases the complexity of the function from O(n) per stacking context (where n is the number of layers visited during RenderLayer::CollectLayers) to O(n*m) (where m is the number of layers in the stacking context that could be potentially promoted), but it would be a huge win in terms of code complexity and maintainability. This increase in complexity may not be a concern in practice, though. We&apos;ll have to do some measurements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828559</commentid>
    <comment_count>1</comment_count>
    <who name="">vollick</who>
    <bug_when>2013-02-08 07:35:48 -0800</bug_when>
    <thetext>I should mention that this is an alternative to https://bugs.webkit.org/show_bug.cgi?id=109236. If this approach works, 109236 will be unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834150</commentid>
    <comment_count>2</comment_count>
      <attachid>188599</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-02-15 10:30:50 -0800</bug_when>
    <thetext>Created attachment 188599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834217</commentid>
    <comment_count>3</comment_count>
      <attachid>188599</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 11:37:28 -0800</bug_when>
    <thetext>Comment on attachment 188599
Patch

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

New failing tests:
platform/chromium/virtual/softwarecompositing/overflow/dynamic-composited-scrolling-status.html
platform/chromium/virtual/gpu/compositedscrolling/overflow/dynamic-composited-scrolling-status.html
platform/chromium/virtual/softwarecompositing/overflow/textarea-scroll-touch.html
compositing/overflow/textarea-scroll-touch.html
compositing/overflow/dynamic-composited-scrolling-status.html
platform/chromium/virtual/gpu/compositedscrolling/overflow/textarea-scroll-touch.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/overflow-scrollbar-combinations.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834292</commentid>
    <comment_count>4</comment_count>
      <attachid>188599</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 12:48:28 -0800</bug_when>
    <thetext>Comment on attachment 188599
Patch

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

New failing tests:
platform/chromium/virtual/softwarecompositing/overflow/dynamic-composited-scrolling-status.html
platform/chromium/virtual/gpu/compositedscrolling/overflow/dynamic-composited-scrolling-status.html
platform/chromium/virtual/softwarecompositing/overflow/textarea-scroll-touch.html
compositing/overflow/textarea-scroll-touch.html
compositing/overflow/dynamic-composited-scrolling-status.html
platform/chromium/virtual/gpu/compositedscrolling/overflow/textarea-scroll-touch.html
platform/chromium/virtual/gpu/compositedscrolling/scrollbars/overflow-scrollbar-combinations.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834344</commentid>
    <comment_count>5</comment_count>
      <attachid>188637</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-02-15 13:40:46 -0800</bug_when>
    <thetext>Created attachment 188637
Patch

Updating layout test expectations, will rebaseline in https://bugs.webkit.org/show_bug.cgi?id=109965.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836591</commentid>
    <comment_count>6</comment_count>
      <attachid>188637</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-19 11:29:20 -0800</bug_when>
    <thetext>Comment on attachment 188637
Patch

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:5298
&gt; -    bool shouldUpdateDescendantsAreContiguousInStackingOrder = isStackingContext() &amp;&amp; (m_zOrderListsDirty || m_normalFlowListDirty);
&gt; +    bool shouldUpdateCanBeStackingContainer = isStackingContext() &amp;&amp; (m_zOrderListsDirty || m_normalFlowListDirty);

Only composited scrolling uses the stacking container logic. You need to avoid all the work to update the flag when the layer is not a candidate for composited scrolling, otherwise you&apos;ll slow everything down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836644</commentid>
    <comment_count>7</comment_count>
      <attachid>189137</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-02-19 12:10:36 -0800</bug_when>
    <thetext>Created attachment 189137
Patch

Added a check for acceleratedCompositingForOverflowScrollEnabled(). I have another bug (https://bugs.webkit.org/show_bug.cgi?id=109966) that I&apos;m working on which will reduce this further to only perform the full computation for overflow-scroll layers. I thought it was enough to make a separate patch out of it. Should I just wait and upload them together?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836678</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-19 12:38:46 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=189137) [details]
&gt; Patch
&gt; 
&gt; Added a check for acceleratedCompositingForOverflowScrollEnabled(). I have another bug (https://bugs.webkit.org/show_bug.cgi?id=109966) that I&apos;m working on which will reduce this further to only perform the full computation for overflow-scroll layers. I thought it was enough to make a separate patch out of it. Should I just wait and upload them together?

I think you should do the other one first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842599</commentid>
    <comment_count>9</comment_count>
      <attachid>189137</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-02-26 18:56:06 -0800</bug_when>
    <thetext>Comment on attachment 189137
Patch

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

I have a hard time saying how it&apos;s a simplification when the new code end up being *longer* than the original one, seems to double the amount of zorder list we use  and uses a lot of  boolean parameters.

&gt; Source/WebCore/rendering/RenderLayer.cpp:-601
&gt; -//  And we would conclude that C could be promoted.

Removing this comment is not something I am supportive of.

&gt; Source/WebCore/rendering/RenderLayer.cpp:528
&gt; +    return layer-&gt;isRootLayer() || layerRenderer-&gt;isPositioned() || layer-&gt;hasTransform();

Looks like you should be using RenderObject::canContainFixedPositionedObject here as this should handle more cases than that (at least, flow-thread and foreign-object**).

** foreign-object is not actually reachable from this code as SVG objects don&apos;t have RenderLayer.

&gt; Source/WebCore/rendering/RenderLayer.cpp:563
&gt; +    // TODO (hartmanng@chromium.org): We can early-out of this function more

We don&apos;t put TODO in WebKit, only FIXMEs without an owner.

&gt; Source/WebCore/rendering/RenderLayer.cpp:581
&gt; +    // We can&apos;t use TemporaryChange&lt;&gt; here since m_needsCompositedScrolling and
&gt; +    // m_isNormalFlowOnly are both bitfields, so we have to do it the
&gt; +    // old-fashioned way.
&gt; +    bool oldNeedsCompositedScrolling = m_needsCompositedScrolling;
&gt; +    bool oldIsNormalFlowOnly = m_isNormalFlowOnly;

I don&apos;t think I understand your comment, are you saying that because *both* are bitfield you can&apos;t use TemporaryChange or just because the type is boolean?

&gt; Source/WebCore/rendering/RenderLayer.cpp:688
&gt; +// call updateCanBeStackingContainer for all descendants of
&gt; +// stacking context &quot;ancestorStackingContext&quot;

Seems like a pretty useless comment.

It also doesn&apos;t really match the method name: updateCan*Children*BeStackingContainers, which calls updateCanBeStackingContainer. There is a mismatch between self / children that makes it difficult to read and probably justify the above comment. Suggestion for the naming: updateCanBeStackingContainerRecursively.

&gt; Source/WebCore/rendering/RenderLayer.cpp:1952
&gt; +        updateIsNormalFlowOnly();

I don&apos;t understand the need for this. You are concerned about the z-order lists and whether you are a stacking context.

Also this is deeply incorrect: if your normal-flow bit was wrong, you already called updateSelfPaintingLayer() 5 lines above which relies on this information. You will get away when you are promoted as needsCompositedScrolling() force the layer to be self-painting, not so much when you are demoted.

&gt; Source/WebCore/rendering/RenderLayer.h:802
&gt; +    void updateCanChildrenBeStackingContainers(RenderLayer*, bool);

An API taking a bool with *no* explanation about what this boolean is supposed to do.

Please refrain yourself from adding boolean parameters and use enum instead for readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843231</commentid>
    <comment_count>10</comment_count>
    <who name="">vollick</who>
    <bug_when>2013-02-27 10:35:58 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 189137 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189137&amp;action=review
&gt; 
&gt; I have a hard time saying how it&apos;s a simplification when the new code end up being *longer* than the original one, seems to double the amount of zorder list we use  and uses a lot of  boolean parameters.

The new code certainly has some complexity, but comparing to the old code is a bit apples-to-oranges. This patch introduces a few correctness fixes in addition to trying a new approach. The hope was that comparing the pre/post promotion paint order lists would be conceptually simpler than the previous index based approach, but perhaps it isn&apos;t. I&apos;ve updated that approach so that it&apos;s correct. PTAL, if you can spare the time: https://bugs.webkit.org/show_bug.cgi?id=109236. The newest patch has the same layout tests as this patch does. Is that approach easier to reason about?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843429</commentid>
    <comment_count>11</comment_count>
      <attachid>190587</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-02-27 13:18:12 -0800</bug_when>
    <thetext>Created attachment 190587
Patch

(In reply to comment #9)
&gt; (From update of attachment 189137 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189137&amp;action=review

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:-601
&gt; &gt; -//  And we would conclude that C could be promoted.
&gt; 
&gt; Removing this comment is not something I am supportive of.

That comment isn&apos;t really relevant anymore. It discusses specific details about the old implementation, which no longer applies to this patch. If you&apos;d like, I can add a more thorough description of the new implementation.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:528
&gt; &gt; +    return layer-&gt;isRootLayer() || layerRenderer-&gt;isPositioned() || layer-&gt;hasTransform();
&gt; 
&gt; Looks like you should be using RenderObject::canContainFixedPositionedObject here as this should handle more cases than that (at least, flow-thread and foreign-object**).
&gt; 
&gt; ** foreign-object is not actually reachable from this code as SVG objects don&apos;t have RenderLayer.

I actually didn&apos;t write this function, just moved it further up in the file. Not to say that it isn&apos;t a valid concern, but maybe it could be addressed in a separate bug?


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:563
&gt; &gt; +    // TODO (hartmanng@chromium.org): We can early-out of this function more
&gt; 
&gt; We don&apos;t put TODO in WebKit, only FIXMEs without an owner.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:581
&gt; &gt; +    // We can&apos;t use TemporaryChange&lt;&gt; here since m_needsCompositedScrolling and
&gt; &gt; +    // m_isNormalFlowOnly are both bitfields, so we have to do it the
&gt; &gt; +    // old-fashioned way.
&gt; &gt; +    bool oldNeedsCompositedScrolling = m_needsCompositedScrolling;
&gt; &gt; +    bool oldIsNormalFlowOnly = m_isNormalFlowOnly;
&gt; 
&gt; I don&apos;t think I understand your comment, are you saying that because *both* are bitfield you can&apos;t use TemporaryChange or just because the type is boolean?

TemporaryChange&lt;bool&gt; takes in a reference to a bool. Since m_needsCompositedScrolling and m_isNormalFlowOnly are bitfield values, attempting to pass either of them in to TemporaryChange&lt;bool&gt; as bool&amp; will cause a compile error.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:688
&gt; &gt; +// call updateCanBeStackingContainer for all descendants of
&gt; &gt; +// stacking context &quot;ancestorStackingContext&quot;
&gt; 
&gt; Seems like a pretty useless comment.

removed.


&gt; It also doesn&apos;t really match the method name: updateCan*Children*BeStackingContainers, which calls updateCanBeStackingContainer. There is a mismatch between self / children that makes it difficult to read and probably justify the above comment. Suggestion for the naming: updateCanBeStackingContainerRecursively.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:1952
&gt; &gt; +        updateIsNormalFlowOnly();
&gt; 
&gt; I don&apos;t understand the need for this. You are concerned about the z-order lists and whether you are a stacking context.

It&apos;s true that updateCompositedScrolling() doesn&apos;t care about normal flow information, but it could affect the normal-flow-only status of a layer if it decides to opt in (or opt-out) since shouldBeNormalFlowOnly() makes direct use of needsCompositedScrolling(). If we don&apos;t update the value here, isNormalFlowOnly() may continue to return stale values.


&gt; Also this is deeply incorrect: if your normal-flow bit was wrong, you already called updateSelfPaintingLayer() 5 lines above which relies on this information. You will get away when you are promoted as needsCompositedScrolling() force the layer to be self-painting, not so much when you are demoted.

I didn&apos;t realize that, thanks for pointing it out. I&apos;ve moved the call to updateIsNormalFlowOnly() to above the updateSelfPaintingLayer() call. This doesn&apos;t affect the rest of the behaviour of this patch.


&gt; &gt; Source/WebCore/rendering/RenderLayer.h:802
&gt; &gt; +    void updateCanChildrenBeStackingContainers(RenderLayer*, bool);
&gt; 
&gt; An API taking a bool with *no* explanation about what this boolean is supposed to do.
&gt; 
&gt; Please refrain yourself from adding boolean parameters and use enum instead for readability.

I found a way around having a bool parameter at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843494</commentid>
    <comment_count>12</comment_count>
      <attachid>190587</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 14:17:54 -0800</bug_when>
    <thetext>Comment on attachment 190587
Patch

Attachment 190587 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/16758240

New failing tests:
html5lib/generated/run-tests16-data.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843713</commentid>
    <comment_count>13</comment_count>
      <attachid>190587</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-27 21:52:28 -0800</bug_when>
    <thetext>Comment on attachment 190587
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        change in stacking order. This should be more intuitive and more

I think it would be helpful to add one more sentence just before the last sentence, explaining what the code does after this comparison.  something like &quot;if the two lists are in fact the same, then we know it is safe to promote the layer to be a stacking container.&quot;

&gt; Source/WebCore/ChangeLog:30
&gt; +        (WebCore::RenderLayer::RenderLayer):
&gt; +        (WebCore::isPositionedContainer):
&gt; +        (WebCore):
&gt; +        (WebCore::getStackingOrderElementAt):
&gt; +        (WebCore::RenderLayer::updateCanBeStackingContainer):
&gt; +        (WebCore::RenderLayer::updateCanChildrenBeStackingContainers):
&gt; +        (WebCore::RenderLayer::canBeStackingContainer):
&gt; +        (WebCore::RenderLayer::updateIsNormalFlowOnly):
&gt; +        (WebCore::RenderLayer::updateNeedsCompositedScrolling):
&gt; +        (WebCore::RenderLayer::updateLayerListsIfNeeded):
&gt; +        (WebCore::RenderLayer::updateStackingContextsAfterStyleChange):
&gt; +        (WebCore::RenderLayer::styleChanged):

Especially for a CL of this size (but also in general when not trivial), WebKit folks appreciate having some brief text to explain all the changes associated with each item on this list.  You can look through changelogs to see examples of where patches have done this.  I think that wil also help whoever the final reviewer will be.

&gt; Source/WebCore/rendering/RenderLayer.cpp:155
&gt; +    , m_canBePromotedToStackingcontainer(false)

let&apos;s use capital C on &quot;container&quot;

&gt; Source/WebCore/rendering/RenderLayer.cpp:540
&gt; +static const RenderLayer* getStackingOrderElementAt(const Vector&lt;RenderLayer*&gt;* posZOrderList, const Vector&lt;RenderLayer*&gt;* negZOrderList, const bool fromLeft, const size_t index)

This type of bool is definitely a place where enum makes more sense.  On the other hand, this is a minor trivial private helper function, so I don&apos;t know what actual reviewers would want.  I would still vote for enum, declared privately immediately above here.

&gt; Source/WebCore/rendering/RenderLayer.cpp:563
&gt; +// two sets of lists.

I don&apos;t know where, perhaps this comment is a good place, but I feel like the code needs an example in comments, that illustrates why this heavy-handed robust approach is being taken.  i.e. the example you and Ian have told me 2-3 times now and I keep forgetting that shows how stacking order can break in ways that are tricky and error-prone to catch otherwise, that motivates the approach in this function.

&gt; Source/WebCore/rendering/RenderLayer.cpp:564
&gt; +void RenderLayer::updateCanBeStackingContainer(RenderLayer* ancestorStackingContext)

What if we have an ancestorStackingContainer before an ancestorStackingContext?  Wouldn&apos;t we need to use the ancestorStackingContainer instead?

&gt; Source/WebCore/rendering/RenderLayer.cpp:619
&gt; +    // Insert this into the posZOrderistBeforePromote directly after the
&gt; +    // positioned ancestor, if there is one. Otherwise, add it to the very
&gt; +    // beginning.

I think I&apos;m misunderstanding something, why do we need to insert &quot;this&quot; into the before list?  I can take a look again after hearing your explanation =)

&gt; Source/WebCore/rendering/RenderLayer.cpp:648
&gt; +    // Scan over the lists twice - the first time from left-to-right and the
&gt; +    // second from right-to-left - each time stopping when we hit this in
&gt; +    // the after-promote list. We check along the way for any inconsistencies
&gt; +    // between the two lists that could cause a change in paint order if we
&gt; +    // promote.
&gt; +    for (int pass = 0; pass &lt; 2; pass++) {

Are we certain that we don&apos;t need to check the middle part of the layer lists here, too?  i.e. the layers that get shifted from the ancestor container to the current layer... do we care/know for certain that the ordering of those layers will not change?

I think the comment here is explaining the implementation, which is OK, but it might help better to explain the concept.  For example something like &quot;The layer lists can conceptually be divided into 3 parts:  (a) before the new stacking container, (b) part of the new stacking container, and (c) after the new stacking container.  We actually only need to check (a) and (c), because &lt;insert reason here&gt;.  To do this, we take two passes over the lists, one from the beginning, the other from the end.

&gt; Source/WebCore/rendering/RenderLayer.cpp:699
&gt; +        updateCanBeStackingContainer(ancestorStackingContext);

See one of my questions above - if we do need to use ancestorStackingContainers instead, I guess it would be a few lines additional code here that potentially changes the RenderLayer that&apos;s passed down the recursion.  Does that seem right?

&gt; Source/WebCore/rendering/RenderLayer.cpp:1987
&gt; +        updateIsNormalFlowOnly();

Looking at the code before applying this patch, it looks like something similar to this would have been necessary for correctness in the first place, no?  Otherwise m_isNormalFlowOnly would not have been updated when needsCompositedScrolling changed.  Was the previous code correct, by somehow calling styleChanged()?  If so, what is the new case that requires adding this explicitly?

&gt; Source/WebCore/rendering/RenderLayer.cpp:5391
&gt; +    bool shouldUpdateCanBeStackingContainer = acceleratedCompositingForOverflowScrollEnabled() &amp;&amp; isStackingContext() &amp;&amp; (m_zOrderListsDirty || m_normalFlowListDirty);

Again, related to my previous question about ancestorStackingContext vs ancestorStackingContainer.   If we did need to use ancestorStackingContainer, we should probably be saying (isStackingContext() || isStackingContainer()) here, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843719</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2013-02-27 21:56:02 -0800</bug_when>
    <thetext>
Quick summary of feedback in Comment #13 -  
 a bunch of nits
 2-3 requests for clarification
 one primary question about ancestorStackingContext vs ancestorStackingContainer.  I wouldn&apos;t be surprised if you already thought of this and just let us know why it&apos;s actually correct this way.

Nice work Glenn =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844247</commentid>
    <comment_count>15</comment_count>
      <attachid>190760</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-02-28 11:16:37 -0800</bug_when>
    <thetext>Created attachment 190760
Patch

(In reply to comment #13)
&gt; (From update of attachment 190587 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190587&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        change in stacking order. This should be more intuitive and more
&gt; 
&gt; I think it would be helpful to add one more sentence just before the last sentence, explaining what the code does after this comparison.  something like &quot;if the two lists are in fact the same, then we know it is safe to promote the layer to be a stacking container.&quot;

done.


&gt; Especially for a CL of this size (but also in general when not trivial), WebKit folks appreciate having some brief text to explain all the changes associated with each item on this list.  You can look through changelogs to see examples of where patches have done this.  I think that wil also help whoever the final reviewer will be.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:155
&gt; &gt; +    , m_canBePromotedToStackingcontainer(false)
&gt; 
&gt; let&apos;s use capital C on &quot;container&quot;

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:540
&gt; &gt; +static const RenderLayer* getStackingOrderElementAt(const Vector&lt;RenderLayer*&gt;* posZOrderList, const Vector&lt;RenderLayer*&gt;* negZOrderList, const bool fromLeft, const size_t index)
&gt; 
&gt; This type of bool is definitely a place where enum makes more sense.  On the other hand, this is a minor trivial private helper function, so I don&apos;t know what actual reviewers would want.  I would still vote for enum, declared privately immediately above here.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:563
&gt; &gt; +// two sets of lists.
&gt; 
&gt; I don&apos;t know where, perhaps this comment is a good place, but I feel like the code needs an example in comments, that illustrates why this heavy-handed robust approach is being taken.  i.e. the example you and Ian have told me 2-3 times now and I keep forgetting that shows how stacking order can break in ways that are tricky and error-prone to catch otherwise, that motivates the approach in this function.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:564
&gt; &gt; +void RenderLayer::updateCanBeStackingContainer(RenderLayer* ancestorStackingContext)
&gt; 
&gt; What if we have an ancestorStackingContainer before an ancestorStackingContext?  Wouldn&apos;t we need to use the ancestorStackingContainer instead?

Using stacking containers could cause problems here, since we&apos;re in the middle of figuring out what layers can (and can&apos;t) be stacking containers.

Here&apos;s an example Ian gave me of why this could be problematic:
Say we have a stacking context with a child that WAS a stacking container, and a grand child that wasn&apos;t. If we use the child as the ancestorStacking* for the grand child and then later it turns out the that child won&apos;t actually opt in (or will opt out), then we&apos;re in trouble.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:619
&gt; &gt; +    // Insert this into the posZOrderistBeforePromote directly after the
&gt; &gt; +    // positioned ancestor, if there is one. Otherwise, add it to the very
&gt; &gt; +    // beginning.
&gt; 
&gt; I think I&apos;m misunderstanding something, why do we need to insert &quot;this&quot; into the before list?  I can take a look again after hearing your explanation =

If the layer isn&apos;t positioned, it won&apos;t appear in posZOrderListBeforePromote. Since we want to eventually compare the paint order between the pre-promote list and the post-promote list, it&apos;s very convenient to have &quot;this&quot; in posZOrderListBeforePromote in its correct paint-order position. It just simplifies the logic later when we&apos;re actually performing the two passes through both lists to ensure paint order hasn&apos;t changed. I&apos;ve added a bit to the comment here, hopefully that helps clarify the reasoning.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:648
&gt; &gt; +    // Scan over the lists twice - the first time from left-to-right and the
&gt; &gt; +    // second from right-to-left - each time stopping when we hit this in
&gt; &gt; +    // the after-promote list. We check along the way for any inconsistencies
&gt; &gt; +    // between the two lists that could cause a change in paint order if we
&gt; &gt; +    // promote.
&gt; &gt; +    for (int pass = 0; pass &lt; 2; pass++) {
&gt; 
&gt; Are we certain that we don&apos;t need to check the middle part of the layer lists here, too?  i.e. the layers that get shifted from the ancestor container to the current layer... do we care/know for certain that the ordering of those layers will not change?

Yes, the order of the children should not change with respect to each other because that order is determined by the tree order and z-order, which should be completely unaffected by promotion. The only possible paint-order change is when the children move with respect to their parent who is getting promoted, or if the children move with respect to the other non-children (ie, if the children are non-contiguous).


&gt; I think the comment here is explaining the implementation, which is OK, but it might help better to explain the concept.  For example something like &quot;The layer lists can conceptually be divided into 3 parts:  (a) before the new stacking container, (b) part of the new stacking container, and (c) after the new stacking container.  We actually only need to check (a) and (c), because &lt;insert reason here&gt;.  To do this, we take two passes over the lists, one from the beginning, the other from the end.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:699
&gt; &gt; +        updateCanBeStackingContainer(ancestorStackingContext);
&gt; 
&gt; See one of my questions above - if we do need to use ancestorStackingContainers instead, I guess it would be a few lines additional code here that potentially changes the RenderLayer that&apos;s passed down the recursion.  Does that seem right?

Same answer as before. It wouldn&apos;t be hard to add in, but it could have correctness implications.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:1987
&gt; &gt; +        updateIsNormalFlowOnly();
&gt; 
&gt; Looking at the code before applying this patch, it looks like something similar to this would have been necessary for correctness in the first place, no?  Otherwise m_isNormalFlowOnly would not have been updated when needsCompositedScrolling changed.  Was the previous code correct, by somehow calling styleChanged()?  If so, what is the new case that requires adding this explicitly?

Yes, this really is necessary for correctness here, with or without the rest of this patch. It&apos;s just that we got lucky and never ran into the border cases before working on this patch.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:5391
&gt; &gt; +    bool shouldUpdateCanBeStackingContainer = acceleratedCompositingForOverflowScrollEnabled() &amp;&amp; isStackingContext() &amp;&amp; (m_zOrderListsDirty || m_normalFlowListDirty);
&gt; 
&gt; Again, related to my previous question about ancestorStackingContext vs ancestorStackingContainer.   If we did need to use ancestorStackingContainer, we should probably be saying (isStackingContext() || isStackingContainer()) here, right?

Same answer as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846449</commentid>
    <comment_count>16</comment_count>
      <attachid>191233</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-03-04 07:08:57 -0800</bug_when>
    <thetext>Created attachment 191233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846922</commentid>
    <comment_count>17</comment_count>
      <attachid>191233</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-03-04 15:31:49 -0800</bug_when>
    <thetext>Comment on attachment 191233
Patch

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:542
&gt; +    RenderLayerModelObject* layerRenderer = layer-&gt;renderer();
&gt; +    return layer-&gt;isRootLayer() || layerRenderer-&gt;isPositioned() || layer-&gt;hasTransform();

Please add a FIXME about this being not in sync with containingBlock (and yes, it can be handled in a follow-up bug).

&gt; Source/WebCore/rendering/RenderLayer.cpp:545
&gt; +enum StackingOrderDirection {FromRight, FromLeft};

I think we would need spaces before and after &apos;{&apos; and &apos;}&apos;.

&gt; Source/WebCore/rendering/RenderLayer.cpp:549
&gt; +// from left-to-right and right-to-left.

This is not a good use of left / right. You probably think about these directions as you read from left-to-right so you assume Vectors grow towards the &quot;left&quot; but that&apos;s arbitrary.

It&apos;s also completely unrelated to the actual walking you are doing, which is on the z-order lists so it&apos;s more appropriate to talk about background vs foreground walking. If you don&apos;t like to use the visual naming, { FromStartOfVector, FromEndOfVector }

&gt; Source/WebCore/rendering/RenderLayer.cpp:609
&gt; +    updateNormalFlowList();

Was the original ASSERT wrong? (AFAICT the rest of the calling code is the same so this shouldn&apos;t be needed, unless the ASSERT was indeed wrong).

&gt; Source/WebCore/rendering/RenderLayer.cpp:611
&gt; +    ASSERT(!m_normalFlowListDirty);

This ASSERT is trivially passing as you call updateNormalFlowList() above, did you remove the wrong one?

&gt; Source/WebCore/rendering/RenderLayer.cpp:636
&gt; +    // We can&apos;t use TemporaryChange&lt;&gt; here since m_needsCompositedScrolling and
&gt; +    // m_isNormalFlowOnly are both bitfields, so we have to do it the
&gt; +    // old-fashioned way.
&gt; +    bool oldNeedsCompositedScrolling = m_needsCompositedScrolling;
&gt; +    bool oldIsNormalFlowOnly = m_isNormalFlowOnly;
&gt; +
&gt; +    // Set the flag on the current layer, then rebuild ancestor stacking
&gt; +    // context&apos;s lists. This way, we can see the exact effects that promoting
&gt; +    // this layer would cause.
&gt; +    m_isNormalFlowOnly = true;
&gt; +    m_needsCompositedScrolling = false;
&gt; +    ancestorStackingContext-&gt;rebuildZOrderLists(StopAtStackingContainers, posZOrderListBeforePromote, negZOrderListBeforePromote);
&gt; +
&gt; +    m_isNormalFlowOnly = false;
&gt; +    m_needsCompositedScrolling = true;
&gt; +    ancestorStackingContext-&gt;rebuildZOrderLists(StopAtStackingContainers, posZOrderListAfterPromote, negZOrderListAfterPromote);
&gt; +
&gt; +    m_needsCompositedScrolling = oldNeedsCompositedScrolling;
&gt; +    m_isNormalFlowOnly = oldIsNormalFlowOnly;

This should be in a helper function to keep this code short, like collectBeforeAfterPromotionZOrderLists.

&gt; Source/WebCore/rendering/RenderLayer.cpp:643
&gt; +    bool hasBackground = renderer()-&gt;hasBackground();

We usually push these booleans when we need them (ie way below).

&gt; Source/WebCore/rendering/RenderLayer.cpp:644
&gt; +    bool weArePositioned = renderer()-&gt;isPositioned();

Why don&apos;t you just use isPositioned? Or rendererIsPositioned? (a layer isn&apos;t strictly positioned, its renderer is)

&gt; Source/WebCore/rendering/RenderLayer.cpp:645
&gt; +

Also I don&apos;t know / think the 2 booleans above buy us much as they are exactly used once.

&gt; Source/WebCore/rendering/RenderLayer.cpp:745
&gt; +    for (int pass = 0; pass &lt; 2; pass++) {

The &apos;for&apos; is super artificial and would probably be more readable if replaced by a helper function below.

&gt; Source/WebCore/rendering/RenderLayer.cpp:794
&gt; +        if (isStackingContext())
&gt; +            return;

You check that this-&gt;isStackingContext() is true here and also in updateCanBeStackingContainer. I think we should pick a side and check once: the easiest is here and ASSERT in updateCanBeStackingContainer.

&gt; Source/WebCore/rendering/RenderLayer.cpp:6023
&gt; +        if (isStackingContext || isStackingContainer())

isStackingContext is checked inside isStackingContainer. Thus this should be written:

if (isStackingContainer())

&gt; Source/WebCore/rendering/RenderLayer.cpp:6034
&gt; +        if (isStackingContext || isStackingContainer())

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848982</commentid>
    <comment_count>18</comment_count>
      <attachid>191777</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-03-06 09:47:59 -0800</bug_when>
    <thetext>Created attachment 191777
Patch

(In reply to comment #17)
&gt; (From update of attachment 191233 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191233&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:542
&gt; &gt; +    RenderLayerModelObject* layerRenderer = layer-&gt;renderer();
&gt; &gt; +    return layer-&gt;isRootLayer() || layerRenderer-&gt;isPositioned() || layer-&gt;hasTransform();
&gt; 
&gt; Please add a FIXME about this being not in sync with containingBlock (and yes, it can be handled in a follow-up bug).

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:545
&gt; &gt; +enum StackingOrderDirection {FromRight, FromLeft};
&gt; 
&gt; I think we would need spaces before and after &apos;{&apos; and &apos;}&apos;.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:549
&gt; &gt; +// from left-to-right and right-to-left.
&gt; 
&gt; This is not a good use of left / right. You probably think about these directions as you read from left-to-right so you assume Vectors grow towards the &quot;left&quot; but that&apos;s arbitrary.
&gt; 
&gt; It&apos;s also completely unrelated to the actual walking you are doing, which is on the z-order lists so it&apos;s more appropriate to talk about background vs foreground walking. If you don&apos;t like to use the visual naming, { FromStartOfVector, FromEndOfVector }

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:609
&gt; &gt; +    updateNormalFlowList();
&gt; 
&gt; Was the original ASSERT wrong? (AFAICT the rest of the calling code is the same so this shouldn&apos;t be needed, unless the ASSERT was indeed wrong).
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:611
&gt; &gt; +    ASSERT(!m_normalFlowListDirty);
&gt; 
&gt; This ASSERT is trivially passing as you call updateNormalFlowList() above, did you remove the wrong one?

Fixed, the original ASSERT was correct, I put it back in and removed the call to updateNormalFlowList().


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:636
&gt; &gt; +    // We can&apos;t use TemporaryChange&lt;&gt; here since m_needsCompositedScrolling and
&gt; &gt; +    // m_isNormalFlowOnly are both bitfields, so we have to do it the
&gt; &gt; +    // old-fashioned way.
&gt; &gt; +    bool oldNeedsCompositedScrolling = m_needsCompositedScrolling;
&gt; &gt; +    bool oldIsNormalFlowOnly = m_isNormalFlowOnly;
&gt; &gt; +
&gt; &gt; +    // Set the flag on the current layer, then rebuild ancestor stacking
&gt; &gt; +    // context&apos;s lists. This way, we can see the exact effects that promoting
&gt; &gt; +    // this layer would cause.
&gt; &gt; +    m_isNormalFlowOnly = true;
&gt; &gt; +    m_needsCompositedScrolling = false;
&gt; &gt; +    ancestorStackingContext-&gt;rebuildZOrderLists(StopAtStackingContainers, posZOrderListBeforePromote, negZOrderListBeforePromote);
&gt; &gt; +
&gt; &gt; +    m_isNormalFlowOnly = false;
&gt; &gt; +    m_needsCompositedScrolling = true;
&gt; &gt; +    ancestorStackingContext-&gt;rebuildZOrderLists(StopAtStackingContainers, posZOrderListAfterPromote, negZOrderListAfterPromote);
&gt; &gt; +
&gt; &gt; +    m_needsCompositedScrolling = oldNeedsCompositedScrolling;
&gt; &gt; +    m_isNormalFlowOnly = oldIsNormalFlowOnly;
&gt; 
&gt; This should be in a helper function to keep this code short, like collectBeforeAfterPromotionZOrderLists.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:643
&gt; &gt; +    bool hasBackground = renderer()-&gt;hasBackground();
&gt; 
&gt; We usually push these booleans when we need them (ie way below).
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:644
&gt; &gt; +    bool weArePositioned = renderer()-&gt;isPositioned();
&gt; 
&gt; Why don&apos;t you just use isPositioned? Or rendererIsPositioned? (a layer isn&apos;t strictly positioned, its renderer is)
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:645
&gt; &gt; +
&gt; 
&gt; Also I don&apos;t know / think the 2 booleans above buy us much as they are exactly used once.

You&apos;re right, I took out both bools completely.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:745
&gt; &gt; +    for (int pass = 0; pass &lt; 2; pass++) {
&gt; 
&gt; The &apos;for&apos; is super artificial and would probably be more readable if replaced by a helper function below.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:794
&gt; &gt; +        if (isStackingContext())
&gt; &gt; +            return;
&gt; 
&gt; You check that this-&gt;isStackingContext() is true here and also in updateCanBeStackingContainer. I think we should pick a side and check once: the easiest is here and ASSERT in updateCanBeStackingContainer.

done.


&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:6023
&gt; &gt; +        if (isStackingContext || isStackingContainer())
&gt; 
&gt; isStackingContext is checked inside isStackingContainer. Thus this should be written:
&gt; 
&gt; if (isStackingContainer())
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:6034
&gt; &gt; +        if (isStackingContext || isStackingContainer())
&gt; 
&gt; Ditto.

done both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851439</commentid>
    <comment_count>19</comment_count>
      <attachid>192274</attachid>
    <who name="Glenn Hartmann">hartmanng</who>
    <bug_when>2013-03-08 12:39:57 -0800</bug_when>
    <thetext>Created attachment 192274
Patch

&gt; &gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:609
&gt; &gt; &gt; +    updateNormalFlowList();
&gt; &gt; 
&gt; &gt; Was the original ASSERT wrong? (AFAICT the rest of the calling code is the same so this shouldn&apos;t be needed, unless the ASSERT was indeed wrong).
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:611
&gt; &gt; &gt; +    ASSERT(!m_normalFlowListDirty);
&gt; &gt; 
&gt; &gt; This ASSERT is trivially passing as you call updateNormalFlowList() above, did you remove the wrong one?
&gt; 
&gt; Fixed, the original ASSERT was correct, I put it back in and removed the call to updateNormalFlowList().

No, I was wrong. The diff there is misleading, as the old function is being called from stacking contexts, whereas the new one is being called from all the stacking contexts&apos; children. The children do not necessarily have clean normal flow lists. However, this call to updateNormalFlowLists() seems to be outdated from a previous version of the patch. I&apos;ve gone through the function and we don&apos;t actually use the normal flow lists for anything, we only need z-order lists. So I took out all the normalFlow stuff from the beginning of that function.

I also found and fixed an indexing bug in getStackingOrderElementAt() that tripped assertions in debug mode.

I updated updateCanBeStackingContainerRecursively, as well, to mirror the behavior of collectLayers().

Finally, I updated the code that builds our pre/post promotion paint order lists to never make use of the &apos;stacking container&apos; concept (which depends on the promotion decision for other layers).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854687</commentid>
    <comment_count>20</comment_count>
      <attachid>192274</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-03-13 14:58:43 -0700</bug_when>
    <thetext>Comment on attachment 192274
Patch

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

This change cannot be safely reviewed as it&apos;s too massive. I have no clue if the testing is even adequate as I haven&apos;t had time to look at it (maybe it is, probably it isn&apos;t considering that there were some flaws in the logic in a previous patch). Glenn, I am asking that you split this patch, until then don&apos;t expect me to r+ it.

Some ideas: land the test independently (even failing), refactor the RenderLayer code to align it with your vision before adding the final logic.

&gt; Source/WebCore/rendering/RenderLayer.cpp:543
&gt; +    // FIXME: This may not be in sync with containingBlock.

It *is* not, you can check yourself.

&gt; Source/WebCore/rendering/RenderLayer.cpp:560
&gt; +    size_t negZOrderListSize = negZOrderList ? negZOrderList-&gt;size() : 0;

Nit: const size_t ...

On top of that, I don&apos;t think negZOrderList can be NULL here or empty (size() == 0) or else you would never got inside the for loop below.

&gt; Source/WebCore/rendering/RenderLayer.cpp:569
&gt; +    size_t posZOrderListSize = posZOrderList ? posZOrderList-&gt;size() : 0;

Ditto.

&gt; Source/WebCore/rendering/RenderLayer.cpp:574
&gt; +        return posZOrderList-&gt;at(posZOrderListSize - index - 1);
&gt; +
&gt; +    return negZOrderList-&gt;at(negZOrderListSize - (index - posZOrderListSize) - 1);

The previous comment explains also why these 2 lines are safe to execute (else you could end up passing (size_t) -1 with bad consequences).

&gt; Source/WebCore/rendering/RenderLayer.cpp:800
&gt; +            if (!m_reflection || reflectionLayer() != child)

This is equivalent to just reflectionLayer() != child (if m_reflection is NULL so will be reflectionLayer() and |child| cannot be NULL).

&gt; LayoutTests/compositing/overflow/opt-into-composited-scrolling-positioned-ancestor.html:2
&gt; +&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;
&gt; +   &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;

We use HTML doctype for new tests: &lt;!DOCTYPE html&gt;

&gt; LayoutTests/compositing/overflow/opt-into-composited-scrolling-positioned-ancestor.html:4
&gt; +&lt;html lang=&quot;en&quot;&gt;

No lang attribute.

&gt; LayoutTests/compositing/overflow/opt-into-composited-scrolling-positioned-ancestor.html:7
&gt; +  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt;
&gt; +  &lt;title&gt;Opting into composited scrolling&lt;/title&gt;

These are useless.

&gt; LayoutTests/compositing/overflow/opt-into-composited-scrolling-positioned-ancestor.html:8
&gt; +  &lt;style type=&quot;text/css&quot; media=&quot;screen&quot;&gt;

Same for these attributes.

&gt; LayoutTests/compositing/overflow/opt-into-composited-scrolling-positioned-ancestor.html:91
&gt; +    } // function doTest

Useless comment.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188599</attachid>
            <date>2013-02-15 10:30:50 -0800</date>
            <delta_ts>2013-02-15 13:40:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130215132716.patch</filename>
            <type>text/plain</type>
            <size>46712</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc1ZjU4ZDNkNTAxM2Ey
NGU3YTExYTBmY2I1OWY4OGMwZTQ5YjI3Yy4uY2ZkMmRkNjJmMTA2YTBiYTdmYTgyMDM0NjUyMjgy
OWEzMDRmNzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTE1ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIHNob3VsZCBiZSBtb3Jl
IGludHVpdGl2ZSBhbmQgbW9yZQorICAgICAgICByb2J1c3QgdGhhbiB0aGUgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKworICAgICAgICBUZXN0OiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50
by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWwKKyAgICAgICAg
VGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3Np
dGVkLXNjcm9sbGluZy5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzUG9zaXRpb25lZENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRh
aW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250
YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUlzTm9ybWFsRmxv
d09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJMaXN0c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVT
dGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aDoKKyAgICAgICAgKFJlbmRlckxheWVyKToKKwogMjAxMy0wMi0wNyAgR3VzdGF2byBOb3Jvbmhh
IFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4g
bGliV2ViQ29yZS5sYSBuZWVkcyB0byBiZSByZWxpbmtlZCB3aGVuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA0MTlhOWUwYzczNzZhMzk5ZTUxYTI5NmY4Mjc0
MDY4M2Q5NWVmODNlLi43YmU5MGVlNjcxY2ExODI5NmVmNjBkYTNhYWMyMjc2Y2E5MzBmZDc5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE1MSw3ICsxNTEs
NyBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVu
ZGVyZXIpCiAgICAgLCBtX2hhc091dE9mRmxvd1Bvc2l0aW9uZWREZXNjZW5kYW50KGZhbHNlKQog
ICAgICwgbV9oYXNPdXRPZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudERpcnR5KHRydWUpCiAgICAg
LCBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyhmYWxzZSkKLSAgICAsIG1fZGVzY2VuZGFudHNB
cmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyKGZhbHNlKQorICAgICwgbV9jYW5CZVByb21vdGVk
VG9TdGFja2luZ2NvbnRhaW5lcihmYWxzZSkKICAgICAsIG1faXNSb290TGF5ZXIocmVuZGVyZXIt
PmlzUmVuZGVyVmlldygpKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwg
bV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCkBAIC01MjIsMTYzICs1MjIsMTgyIEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9s
bEVuYWJsZWQoKSBjb25zdAogICAgICAgICAmJiByZW5kZXJlcigpLT5mcmFtZSgpLT5wYWdlKCkt
PnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJs
ZWQoKTsKIH0KIAotLy8gSWYgd2UgYXJlIGEgc3RhY2tpbmcgY29udGFpbmVyLCB0aGVuIHRoaXMg
ZnVuY3Rpb24gd2lsbCBkZXRlcm1pbmUgaWYgb3VyCi0vLyBkZXNjZW5kYW50cyBmb3IgYSBjb250
aWd1b3VzIGJsb2NrIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIGlzIHJlcXVpcmVkIGluCi0vLyBv
cmRlciBmb3IgYW4gZWxlbWVudCB0byBiZSBzYWZlbHkgcHJvbW90ZWQgdG8gYSBzdGFja2luZyBj
b250YWluZXIuIEl0IGlzIHNhZmUKLS8vIHRvIGJlY29tZSBhIHN0YWNraW5nIGNvbnRhaW5lciBp
ZiB0aGlzIGNoYW5nZSB3b3VsZCBub3QgYWx0ZXIgdGhlIHN0YWNraW5nCi0vLyBvcmRlciBvZiBs
YXllcnMgb24gdGhlIHBhZ2UuIFRoYXQgY2FuIG9ubHkgaGFwcGVuIGlmIGEgbm9uLWRlc2NlbmRh
bnQgYXBwZWFyCi0vLyBiZXR3ZWVuIHVzIGFuZCBvdXIgZGVzY2VuZGFudHMgaW4gc3RhY2tpbmcg
b3JkZXIuIEhlcmUncyBhbiBleGFtcGxlOgotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gIHwgIFwu
Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBICAgQiAgIEMKLS8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgL1wgICB8ICAgL1wuCi0vLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCAtOCAgRCAgMiAgNwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0vLwotLy8gSSd2
ZSBsYWJlbGVkIG91ciBub3JtYWwgZmxvdyBkZXNjZW5kYW50cyBBLCBCLCBDLCBhbmQgRCwgb3Vy
IHN0YWNraW5nCi0vLyBjb250YWluZXIgZGVzY2VuZGFudHMgd2l0aCB0aGVpciB6IGluZGljZXMs
IGFuZCB1cyB3aXRoICd0aGlzJyAod2UncmUgYQotLy8gc3RhY2tpbmcgY29udGFpbmVyIGFuZCBv
dXIgekluZGV4IGRvZXNuJ3QgbWF0dGVyIGhlcmUpLiBUaGVzZSBub2RlcyBhcHBlYXIgaW4KLS8v
IHRocmVlIGxpc3RzOiBwb3NaT3JkZXIsIG5lZ1pPcmRlciwgYW5kIG5vcm1hbCBmbG93IChrZWVw
IGluIG1pbmQgdGhhdCBub3JtYWwKLS8vIGZsb3cgbGF5ZXJzIGRvbid0IG92ZXJsYXApLiBTbyBp
ZiB3ZSBhcnJhbmdlIHRoZXNlIGxpc3RzIGluIG9yZGVyIHdlIGdldCBvdXIKLS8vIHN0YWNraW5n
IG9yZGVyOgotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgWy04XSwgW0EtRF0sIFswLCAyLCA1
LCA3XS0tPiBwb3Mgei1vcmRlci4KLS8vICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8Ci0v
LyAgICAgICAgTmVnIHotb3JkZXIuIDwtKyAgICAgKy0tPiBOb3JtYWwgZmxvdyBkZXNjZW5kYW50
cy4KLS8vCi0vLyBXZSBjYW4gdGhlbiBhc3NpZ24gbmV3LCAnc3RhY2tpbmcnIG9yZGVyIGluZGlj
ZXMgdG8gdGhlc2UgZWxlbWVudHMgYXMgZm9sbG93czoKLS8vCi0vLyAgICAgICAgICAgICAgICAg
ICAgIFstOF0sIFtBLURdLCBbMCwgMiwgNSwgN10KLS8vICdTdGFja2luZycgaW5kaWNlczogIC0x
ICAgICAwICAgICAxICAyICAzICA0Ci0vLwotLy8gTm90ZSB0aGF0IHRoZSBub3JtYWwgZmxvdyBk
ZXNjZW5kYW50cyBjYW4gc2hhcmUgYW4gaW5kZXggYmVjYXVzZSB0aGV5IGRvbid0Ci0vLyBzdGFj
ay9vdmVybGFwLiBOb3cgb3VyIHByb2JsZW0gYmVjb21lcyB2ZXJ5IHNpbXBsZTogYSBsYXllciBj
YW4gc2FmZWx5IGJlY29tZQotLy8gYSBzdGFja2luZyBjb250YWluZXIgaWYgdGhlIHN0YWNraW5n
LW9yZGVyIGluZGljZXMgb2YgaXQgYW5kIGl0cyBkZXNjZW5kYW50cwotLy8gYXBwZWFyIGluIGEg
Y29udGlndW91cyBibG9jayBpbiB0aGUgbGlzdCBvZiBzdGFja2luZyBpbmRpY2VzLiBUaGlzIHBy
b2JsZW0KLS8vIGNhbiBiZSBzb2x2ZWQgdmVyeSBlZmZpY2llbnRseSBieSBjYWxjdWxhdGluZyB0
aGUgbWluL21heCBzdGFja2luZyBpbmRpY2VzIGluCi0vLyB0aGUgc3VidHJlZSwgYW5kIHRoZSBu
dW1iZXIgc3RhY2tpbmcgY29udGFpbmVyIGRlc2NlbmRhbnRzLiBPbmNlIHdlIGhhdmUgdGhpcwot
Ly8gaW5mb3JtYXRpb24sIHdlIGtub3cgdGhhdCB0aGUgc3VidHJlZSdzIGluZGljZXMgZm9ybSBh
IGNvbnRpZ3VvdXMgYmxvY2sgaWY6Ci0vLwotLy8gICAgICAgICAgIG1heFN0YWNrSW5kZXggLSBt
aW5TdGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMKLS8vCi0vLyBTbyBmb3Igbm9kZSBBIGlu
IHRoZSBleGFtcGxlIGFib3ZlIHdlIHdvdWxkIGhhdmU6Ci0vLyAgIG1heFN0YWNrSW5kZXggPSAx
Ci0vLyAgIG1pblN0YWNrSW5kZXggPSAtMQotLy8gICBudW1TQ0RlY2VuZGFudHMgPSAyCi0vLwot
Ly8gYW5kIHNvLAotLy8gICAgICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVt
U0NEZXNjZW5kYW50cwotLy8gID09PT4gICAgICAgICAgICAgICAgICAgICAgMSAtICgtMSkgPT0g
MgotLy8gID09PT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT0gMgotLy8KLS8vICBT
aW5jZSB0aGlzIGlzIHRydWUsIEEgY2FuIHNhZmVseSBiZWNvbWUgYSBzdGFja2luZyBjb250YWlu
ZXIuCi0vLyAgTm93LCBmb3Igbm9kZSBDIHdlIGhhdmU6Ci0vLwotLy8gICBtYXhTdGFja0luZGV4
ID0gNAotLy8gICBtaW5TdGFja0luZGV4ID0gMCA8LS0gYmVjYXVzZSBDIGhhcyBzdGFja2luZyBp
bmRleCAwLgotLy8gICBudW1TQ0RlY2VuZGFudHMgPSAyCi0vLwotLy8gYW5kIHNvLAotLy8gICAg
ICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50cwotLy8g
ID09PT4gICAgICAgICAgICAgICAgICAgICAgICAgNCAtIDAgPT0gMgotLy8gID09PT4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQgPT0gMgotLy8KLS8vIFNpbmNlIHRoaXMgaXMgZmFsc2Us
IEMgY2Fubm90IGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhp
cwotLy8gaGFwcGVuZWQgYmVjYXVzZSBvZiB0aGUgZWxlbWVudHMgd2l0aCB6LWluZGV4IDUgYW5k
IDAuIE5vdyBpZiA1IGhhZCBiZWVuIGEKLS8vIGNoaWxkIG9mIEMgcmF0aGVyIHRoYW4gRCwgYW5k
IEEgaGFkIG5vIGNoaWxkIHdpdGggWiBpbmRleCAwLCB3ZSB3b3VsZCBoYXZlIGhhZDoKLS8vCi0v
LyAgIG1heFN0YWNrSW5kZXggPSAzCi0vLyAgIG1pblN0YWNrSW5kZXggPSAwIDwtLSBiZWNhdXNl
IEMgaGFzIHN0YWNraW5nIGluZGV4IDAuCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9IDMKLS8vCi0v
LyBhbmQgc28sCi0vLyAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1T
Q0Rlc2NlbmRhbnRzCi0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gMCA9PSAz
Ci0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSAzCi0vLwotLy8gIEFu
ZCB3ZSB3b3VsZCBjb25jbHVkZSB0aGF0IEMgY291bGQgYmUgcHJvbW90ZWQuCi12b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKQot
ewotICAgIGlmICghaXNTdGFja2luZ0NvbnRleHQoKSB8fCAhYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoIW1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7Ci0gICAgQVNTRVJUKCFtX3pPcmRlckxpc3RzRGly
dHkpOworc3RhdGljIGlubGluZSBib29sIGlzUG9zaXRpb25lZENvbnRhaW5lcihjb25zdCBSZW5k
ZXJMYXllciogbGF5ZXIpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5ZXJSZW5k
ZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOworICAgIHJldHVybiBsYXllci0+aXNSb290TGF5ZXIo
KSB8fCBsYXllclJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+aGFzVHJhbnNmb3Jt
KCk7Cit9CiAKLSAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0
OwotICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pPcmRlckxpc3Q7Ci0gICAg
cmVidWlsZFpPcmRlckxpc3RzKFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIHBvc1pPcmRlckxpc3Qs
IG5lZ1pPcmRlckxpc3QpOworLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB1cGRhdGVDYW5CZVN0YWNr
aW5nQ29udGFpbmVyIHRvIHNpbXBsaWZ5IGluZGV4aW5nIGludG8KKy8vIHRoZSBwb3NpdGl2ZSBh
bmQgbmVnYXRpdmUgei1vcmRlciBsaXN0cywgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGVtIGJv
dGgKKy8vIGZyb20gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdC4KK3N0YXRpYyBjb25z
dCBSZW5kZXJMYXllciogZ2V0U3RhY2tpbmdPcmRlckVsZW1lbnRBdChjb25zdCBWZWN0b3I8UmVu
ZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCwgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5l
Z1pPcmRlckxpc3QsIGNvbnN0IGJvb2wgZnJvbUxlZnQsIGNvbnN0IHNpemVfdCBpbmRleCkKK3sK
KyAgICBzaXplX3QgbmVnWk9yZGVyTGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0ID8gbmVnWk9yZGVy
TGlzdC0+c2l6ZSgpIDogMDsKIAotICAgIC8vIENyZWF0ZSBhIHJldmVyc2UgbG9va3VwLgotICAg
IEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBpbnQ+IGxvb2t1cDsKKyAgICBpZiAoZnJvbUxl
ZnQpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbmVnWk9yZGVyTGlzdFNpemUpCisgICAgICAgICAg
ICByZXR1cm4gbmVnWk9yZGVyTGlzdC0+YXQoaW5kZXgpOwogCi0gICAgaWYgKG5lZ1pPcmRlckxp
c3QpIHsKLSAgICAgICAgaW50IHN0YWNraW5nT3JkZXJJbmRleCA9IC0xOwotICAgICAgICBzaXpl
X3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1
cnJlbnRMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGxpc3RTaXplIC0gaSAtIDEpOwotICAgICAg
ICAgICAgaWYgKCFjdXJyZW50TGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBsb29rdXAuc2V0KGN1cnJlbnRMYXllciwgc3Rh
Y2tpbmdPcmRlckluZGV4LS0pOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBwb3NaT3JkZXJM
aXN0LT5hdChpbmRleCAtIG5lZ1pPcmRlckxpc3RTaXplKTsKICAgICB9CiAKLSAgICBpZiAocG9z
Wk9yZGVyTGlzdCkgewotICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5z
aXplKCk7Ci0gICAgICAgIGludCBzdGFja2luZ09yZGVySW5kZXggPSAxOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAgIFJlbmRlckxh
eWVyKiBjdXJyZW50TGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGlm
ICghY3VycmVudExheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgbG9va3VwLnNldChjdXJyZW50TGF5ZXIsIHN0YWNraW5nT3Jk
ZXJJbmRleCsrKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBzaXplX3QgcG9zWk9yZGVyTGlzdFNp
emUgPSBwb3NaT3JkZXJMaXN0ID8gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpIDogMDsKIAotICAgIGlu
dCBtaW5JbmRleCA9IDA7Ci0gICAgaW50IG1heEluZGV4ID0gMDsKLSAgICBpbnQgY291bnQgPSAw
OwotICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotICAgIHVwZGF0ZURlc2NlbmRhbnRz
QXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShsb29rdXAsIG1pbkluZGV4LCBt
YXhJbmRleCwgY291bnQsIGZpcnN0SXRlcmF0aW9uKTsKKyAgICBpZiAoaW5kZXggPCBwb3NaT3Jk
ZXJMaXN0U2l6ZSkKKyAgICAgICAgcmV0dXJuIHBvc1pPcmRlckxpc3QtPmF0KHBvc1pPcmRlckxp
c3RTaXplIC0gaW5kZXggLSAxKTsKKworICAgIHJldHVybiBuZWdaT3JkZXJMaXN0LT5hdChuZWda
T3JkZXJMaXN0U2l6ZSAtIChwb3NaT3JkZXJMaXN0U2l6ZSAtIGluZGV4KSAtIDEpOwogfQogCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5n
T3JkZXJSZWN1cnNpdmUoY29uc3QgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIGludD4mIGxv
b2t1cCwgaW50JiBtaW5JbmRleCwgaW50JiBtYXhJbmRleCwgaW50JiBjb3VudCwgYm9vbCBmaXJz
dEl0ZXJhdGlvbikKKy8vIERldGVybWluZSB3aGV0aGVyIHRoZSBjdXJyZW50IGxheWVyIGNhbiBi
ZSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lciwKKy8vIGdpdmVuIGl0cyBjbG9zZXN0
IHN0YWNraW5nIGNvbnRleHQgYW5jZXN0b3IuIFdlIGRvIHRoaXMgYnkgY29tcHV0aW5nIHdoYXQK
Ky8vIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB6LW9yZGVyIGxpc3RzIHdvdWxkIGxvb2sgbGlrZSBi
ZWZvcmUgYW5kIGFmdGVyCisvLyBwcm9tb3Rpb24sIGFuZCBlbnN1cmluZyB0aGF0IHByb3BlciBz
dGFja2luZyBvcmRlciBpcyBwcmVzZXJ2ZWQgYmV0d2VlbiB0aGUKKy8vIHR3byBzZXRzIG9mIGxp
c3RzLgordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcihSZW5k
ZXJMYXllciogYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpCiB7Ci0gICAgaWYgKGlzU3RhY2tpbmdD
b250ZXh0KCkgJiYgIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAgIGlmIChsb29rdXAuY29udGFp
bnModGhpcykpIHsKLSAgICAgICAgICAgIG1pbkluZGV4ID0gc3RkOjptaW4obWluSW5kZXgsIGxv
b2t1cC5nZXQodGhpcykpOwotICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRl
eCwgbG9va3VwLmdldCh0aGlzKSk7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Cisg
ICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXcoKTsKKyAgICBp
ZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3LT5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMp
IHx8ICFhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKKworICAgIHVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CisKKyAgICBBU1NF
UlQoIW1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7CisKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxh
eWVyKj4gPiBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJl
bmRlckxheWVyKj4gPiBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZTsKKyAgICBPd25QdHI8VmVj
dG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlOworICAgIE93blB0
cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGU7CisKKyAg
ICAvLyBXZSBjYW4ndCB1c2UgVGVtcG9yYXJ5Q2hhbmdlPD4gaGVyZSBzaW5jZSBtX25lZWRzQ29t
cG9zaXRlZFNjcm9sbGluZyBhbmQKKyAgICAvLyBtX2lzTm9ybWFsRmxvd09ubHkgYXJlIGJvdGgg
Yml0ZmllbGRzLCBzbyB3ZSBoYXZlIHRvIGRvIGl0IHRoZQorICAgIC8vIG9sZC1mYXNoaW9uZWQg
d2F5LgorICAgIGJvb2wgb2xkTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbV9uZWVkc0NvbXBv
c2l0ZWRTY3JvbGxpbmc7CisgICAgYm9vbCBvbGRJc05vcm1hbEZsb3dPbmx5ID0gbV9pc05vcm1h
bEZsb3dPbmx5OworCisgICAgLy8gU2V0IHRoZSBmbGFnIG9uIHRoZSBjdXJyZW50IGxheWVyLCB0
aGVuIHJlYnVpbGQgYW5jZXN0b3Igc3RhY2tpbmcKKyAgICAvLyBjb250ZXh0J3MgbGlzdHMuIFRo
aXMgd2F5LCB3ZSBjYW4gc2VlIHRoZSBleGFjdCBlZmZlY3RzIHRoYXQgcHJvbW90aW5nCisgICAg
Ly8gdGhpcyBsYXllciB3b3VsZCBjYXVzZS4KKyAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSB0cnVl
OworICAgIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nID0gZmFsc2U7CisgICAgYW5jZXN0b3JT
dGFja2luZ0NvbnRleHQtPnJlYnVpbGRaT3JkZXJMaXN0cyhTdG9wQXRTdGFja2luZ0NvbnRhaW5l
cnMsIHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLCBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90
ZSk7CisKKyAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBmYWxzZTsKKyAgICBtX25lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZyA9IHRydWU7CisgICAgYW5jZXN0b3JTdGFja2luZ0NvbnRleHQtPnJlYnVp
bGRaT3JkZXJMaXN0cyhTdG9wQXRTdGFja2luZ0NvbnRhaW5lcnMsIHBvc1pPcmRlckxpc3RBZnRl
clByb21vdGUsIG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGUpOworCisgICAgbV9uZWVkc0NvbXBv
c2l0ZWRTY3JvbGxpbmcgPSBvbGROZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmc7CisgICAgbV9pc05v
cm1hbEZsb3dPbmx5ID0gb2xkSXNOb3JtYWxGbG93T25seTsKKworICAgIHNpemVfdCBwb3NaT3Jk
ZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA/IHBv
c1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNpemVfdCBuZWdaT3Jk
ZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA/IG5l
Z1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNpemVfdCBwb3NaT3Jk
ZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUgPyBwb3Na
T3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNpemVfdCBuZWdaT3JkZXJM
aXN0U2l6ZUFmdGVyUHJvbW90ZSA9IG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGUgPyBuZWdaT3Jk
ZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAwOworCisgICAgYm9vbCBoYXNCYWNrZ3JvdW5k
ID0gcmVuZGVyZXIoKS0+aGFzQmFja2dyb3VuZCgpOworICAgIGJvb2wgd2VBcmVQb3NpdGlvbmVk
ID0gcmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCk7CisKKyAgICBjb25zdCBSZW5kZXJMYXllciog
cG9zaXRpb25lZEFuY2VzdG9yID0gcGFyZW50KCk7CisgICAgd2hpbGUgKHBvc2l0aW9uZWRBbmNl
c3RvciAmJiAhaXNQb3NpdGlvbmVkQ29udGFpbmVyKHBvc2l0aW9uZWRBbmNlc3RvcikgJiYgIXBv
c2l0aW9uZWRBbmNlc3Rvci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgcG9zaXRpb25l
ZEFuY2VzdG9yID0gcG9zaXRpb25lZEFuY2VzdG9yLT5wYXJlbnQoKTsKKyAgICBpZiAocG9zaXRp
b25lZEFuY2VzdG9yICYmICghaXNQb3NpdGlvbmVkQ29udGFpbmVyKHBvc2l0aW9uZWRBbmNlc3Rv
cikgfHwgcG9zaXRpb25lZEFuY2VzdG9yLT5pc1N0YWNraW5nQ29udGV4dCgpKSkKKyAgICAgICAg
cG9zaXRpb25lZEFuY2VzdG9yID0gMDsKKworICAgIC8vIEluc2VydCB0aGlzIGludG8gdGhlIHBv
c1pPcmRlcmlzdEJlZm9yZVByb21vdGUgZGlyZWN0bHkgYWZ0ZXIgdGhlCisgICAgLy8gcG9zaXRp
b25lZCBhbmNlc3RvciwgaWYgdGhlcmUgaXMgb25lLiBPdGhlcndpc2UsIGFkZCBpdCB0byB0aGUg
dmVyeQorICAgIC8vIGJlZ2lubmluZy4KKyAgICBpZiAoIXdlQXJlUG9zaXRpb25lZCkgeworICAg
ICAgICBpZiAoIXBvc2l0aW9uZWRBbmNlc3RvcikgeworICAgICAgICAgICAgaWYgKCFwb3NaT3Jk
ZXJMaXN0QmVmb3JlUHJvbW90ZSkKKyAgICAgICAgICAgICAgICBwb3NaT3JkZXJMaXN0QmVmb3Jl
UHJvbW90ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVuZGVyTGF5ZXIqPigpKTsKKworICAgICAg
ICAgICAgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPnByZXBlbmQodGhpcyk7CisgICAgICAg
ICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUrKzsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBwb3NaT3JkZXJMaXN0
U2l6ZUJlZm9yZVByb21vdGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zWk9y
ZGVyTGlzdEJlZm9yZVByb21vdGUtPmF0KGluZGV4KSA9PSBwb3NpdGlvbmVkQW5jZXN0b3IpIHsK
KyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPmluc2VydChp
bmRleCArIDEsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJl
Zm9yZVByb21vdGUrKzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChSZW5kZXJM
YXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIGludCBjaGlsZE1pbkluZGV4ID0gMDsKLSAgICAgICAgaW50IGNo
aWxkTWF4SW5kZXggPSAwOwotICAgICAgICBpbnQgY2hpbGRDb3VudCA9IDA7Ci0gICAgICAgIGNo
aWxkLT51cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNp
dmUobG9va3VwLCBjaGlsZE1pbkluZGV4LCBjaGlsZE1heEluZGV4LCBjaGlsZENvdW50LCBmYWxz
ZSk7Ci0gICAgICAgIGlmIChjaGlsZENvdW50KSB7Ci0gICAgICAgICAgICBjb3VudCArPSBjaGls
ZENvdW50OwotICAgICAgICAgICAgbWluSW5kZXggPSBzdGQ6Om1pbihtaW5JbmRleCwgY2hpbGRN
aW5JbmRleCk7Ci0gICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBjaGls
ZE1heEluZGV4KTsKKyAgICBzaXplX3Qgc2l6ZUJlZm9yZVByb21vdGUgPSBwb3NaT3JkZXJMaXN0
U2l6ZUJlZm9yZVByb21vdGUgKyBuZWdaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGU7CisgICAg
c2l6ZV90IHNpemVBZnRlclByb21vdGUgPSBwb3NaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSAr
IG5lZ1pPcmRlckxpc3RTaXplQWZ0ZXJQcm9tb3RlOworCisgICAgYm9vbCBjYW5Qcm9tb3RlID0g
dHJ1ZTsKKworICAgIC8vIFNjYW4gb3ZlciB0aGUgbGlzdHMgdHdpY2UgLSB0aGUgZmlyc3QgdGlt
ZSBmcm9tIGxlZnQtdG8tcmlnaHQgYW5kIHRoZQorICAgIC8vIHNlY29uZCBmcm9tIHJpZ2h0LXRv
LWxlZnQgLSBlYWNoIHRpbWUgc3RvcHBpbmcgd2hlbiB3ZSBoaXQgdGhpcyBpbgorICAgIC8vIHRo
ZSBhZnRlci1wcm9tb3RlIGxpc3QuIFdlIGNoZWNrIGFsb25nIHRoZSB3YXkgZm9yIGFueSBpbmNv
bnNpc3RlbmNpZXMKKyAgICAvLyBiZXR3ZWVuIHRoZSB0d28gbGlzdHMgdGhhdCBjb3VsZCBjYXVz
ZSBhIGNoYW5nZSBpbiBwYWludCBvcmRlciBpZiB3ZQorICAgIC8vIHByb21vdGUuCisgICAgZm9y
IChpbnQgcGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKKyAgICAgICAgYm9vbCBmcm9tTGVm
dCA9IHBhc3M7CisKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHNpemVC
ZWZvcmVQcm9tb3RlICYmIGluZGV4IDwgc2l6ZUFmdGVyUHJvbW90ZTsgaW5kZXgrKykgeworICAg
ICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyQmVmb3JlUHJvbW90ZSA9IGdldFN0YWNr
aW5nT3JkZXJFbGVtZW50QXQocG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUuZ2V0KCksIG5lZ1pP
cmRlckxpc3RCZWZvcmVQcm9tb3RlLmdldCgpLCBmcm9tTGVmdCwgaW5kZXgpOworICAgICAgICAg
ICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyQWZ0ZXJQcm9tb3RlID0gZ2V0U3RhY2tpbmdPcmRl
ckVsZW1lbnRBdChwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLmdldCgpLCBuZWdaT3JkZXJMaXN0
QWZ0ZXJQcm9tb3RlLmdldCgpLCBmcm9tTGVmdCwgaW5kZXgpOworCisgICAgICAgICAgICBpZiAo
bGF5ZXJCZWZvcmVQcm9tb3RlICE9IGxheWVyQWZ0ZXJQcm9tb3RlKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgZmluZCBhIG1pc21hdGNoLCB0aGUgb25seSBzaXR1YXRpb24gd2hlcmUgd2Ug
aGF2ZW4ndAorICAgICAgICAgICAgICAgIC8vIG5lY2Vzc2FyaWx5IGNoYW5nZWQgcGFpbnQgb3Jk
ZXIgeWV0IGlzIGlmIGxheWVyQWZ0ZXJQcm9tb3RlCisgICAgICAgICAgICAgICAgLy8gaXMgdGhp
cy4KKyAgICAgICAgICAgICAgICBpZiAobGF5ZXJBZnRlclByb21vdGUgIT0gdGhpcykgeworICAg
ICAgICAgICAgICAgICAgICBjYW5Qcm9tb3RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFsc28sIGlm
IHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIGJhY2tncm91bmQsIHRoZW4gYW55CisgICAgICAgICAg
ICAgICAgLy8gbmVnYXRpdmUgei1vcmRlciBjaGlsZHJlbiB3aWxsIGdldCBiZXR3ZWVuIHRoZSBi
YWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSByZXN0IG9mIHRoZSBsYXllci4K
KyAgICAgICAgICAgICAgICBpZiAocGFzcyAmJiBoYXNCYWNrZ3JvdW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhblByb21vdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGF5
ZXJBZnRlclByb21vdGUgPT0gdGhpcykKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQorCisgICAgICAgIGlmICghY2FuUHJvbW90ZSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIGlmICghaXNTdGFja2luZ0NvbnRleHQoKSkgewotICAgICAgICBib29sIG5ld1ZhbHVl
ID0gbWF4SW5kZXggLSBtaW5JbmRleCA9PSBjb3VudDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgICAgIGJvb2wgZGlkVXBkYXRlID0gbmV3VmFsdWUgIT0gbV9kZXNjZW5k
YW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXI7CisgICAgYm9vbCBkaWRVcGRhdGUgPSAo
Y2FuUHJvbW90ZSAhPSBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nY29udGFpbmVyKTsKICNlbmRp
ZgotICAgICAgICBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlciA9IG5l
d1ZhbHVlOworCisgICAgbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ2NvbnRhaW5lciA9IGNhblBy
b21vdGU7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGlmIChk
aWRVcGRhdGUpCi0gICAgICAgICAgICB1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
KyAgICBpZiAoZGlkVXBkYXRlKQorICAgICAgICB1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKICNlbmRpZgotICAgIH0KIH0KIAorLy8gY2FsbCB1cGRhdGVDYW5CZVN0YWNraW5nQ29u
dGFpbmVyIGZvciBhbGwgZGVzY2VuZGFudHMgb2YKKy8vIHN0YWNraW5nIGNvbnRleHQgImFuY2Vz
dG9yU3RhY2tpbmdDb250ZXh0Igordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2FuQ2hpbGRyZW5C
ZVN0YWNraW5nQ29udGFpbmVycyhSZW5kZXJMYXllciogYW5jZXN0b3JTdGFja2luZ0NvbnRleHQs
IGJvb2wgZmlyc3RQYXNzKQoreworICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCgpICYmICFmaXJz
dFBhc3MpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmlyc3RQYXNzKQorICAgICAgICB1
cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0KTsKKwor
ICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUNhbkNoaWxkcmVu
QmVTdGFja2luZ0NvbnRhaW5lcnMoYW5jZXN0b3JTdGFja2luZ0NvbnRleHQsIGZhbHNlKTsKK30K
KworCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFw
KiBnZW9tZXRyeU1hcCkKIHsKICAgICBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0
eSk7CkBAIC05MzcsNyArOTU2LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6Y2FuQmVTdGFja2luZ0Nv
bnRhaW5lcigpIGNvbnN0CiAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkgfHwgIXN0YWNraW5n
Q29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1fZGVzY2Vu
ZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyOworICAgIHJldHVybiBtX2NhbkJlUHJv
bW90ZWRUb1N0YWNraW5nY29udGFpbmVyOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNW
aXNpYmxlQ29udGVudCgpCkBAIC0xMjU0LDEyICsxMjczLDYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpzdGFja2luZ0NvbnRhaW5lcigpIGNvbnN0CiAgICAgcmV0dXJuIGxheWVyOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBs
YXllcikKLXsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBsYXllclJlbmRlcmVyID0gbGF5
ZXItPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIGxheWVyLT5pc1Jvb3RMYXllcigpIHx8IGxheWVy
UmVuZGVyZXItPmlzUG9zaXRpb25lZCgpIHx8IGxheWVyLT5oYXNUcmFuc2Zvcm0oKTsKLX0KLQog
c3RhdGljIGlubGluZSBib29sIGlzRml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVy
KiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXItPmlzUm9vdExheWVyKCkgfHwgbGF5ZXItPmhh
c1RyYW5zZm9ybSgpOwpAQCAtMTkxMCw2ICsxOTIzLDE5IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Om5l
ZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fbmVlZHNDb21wb3Np
dGVkU2Nyb2xsaW5nOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVJc05vcm1hbEZsb3dP
bmx5KCkKK3sKKyAgICBib29sIGlzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dP
bmx5KCk7CisgICAgaWYgKGlzTm9ybWFsRmxvd09ubHkgIT0gbV9pc05vcm1hbEZsb3dPbmx5KSB7
CisgICAgICAgIG1faXNOb3JtYWxGbG93T25seSA9IGlzTm9ybWFsRmxvd09ubHk7CisgICAgICAg
IFJlbmRlckxheWVyKiBwID0gcGFyZW50KCk7CisgICAgICAgIGlmIChwKQorICAgICAgICAgICAg
cC0+ZGlydHlOb3JtYWxGbG93TGlzdCgpOworICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVy
Wk9yZGVyTGlzdHMoKTsKKyAgICB9Cit9CisKKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTmVl
ZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKIHsKICAgICBib29sIG9sZE5lZWRzQ29tcG9zaXRlZFNj
cm9sbGluZyA9IG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOwpAQCAtMTkzNyw2ICsxOTYzLDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKICAg
ICAgICAgICAgIGNsZWFyWk9yZGVyTGlzdHMoKTsKIAogICAgICAgICBkaXJ0eVN0YWNraW5nQ29u
dGFpbmVyWk9yZGVyTGlzdHMoKTsKKyAgICAgICAgdXBkYXRlSXNOb3JtYWxGbG93T25seSgpOwog
CiAgICAgICAgIGNvbXBvc2l0b3IoKS0+c2V0U2hvdWxkUmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0
ZXJMYXlvdXQoKTsKICAgICAgICAgY29tcG9zaXRvcigpLT5zZXRDb21wb3NpdGluZ0xheWVyc05l
ZWRSZWJ1aWxkKCk7CkBAIC01MjgxLDcgKzUzMDgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xs
ZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgQ29sbGVjdExheWVyc0JlaGF2aW9y
CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpCiB7Ci0gICAg
Ym9vbCBzaG91bGRVcGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIg
PSBpc1N0YWNraW5nQ29udGV4dCgpICYmIChtX3pPcmRlckxpc3RzRGlydHkgfHwgbV9ub3JtYWxG
bG93TGlzdERpcnR5KTsKKyAgICBib29sIHNob3VsZFVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWlu
ZXIgPSBpc1N0YWNraW5nQ29udGV4dCgpICYmIChtX3pPcmRlckxpc3RzRGlydHkgfHwgbV9ub3Jt
YWxGbG93TGlzdERpcnR5KTsKICAgICB1cGRhdGVaT3JkZXJMaXN0cygpOwogICAgIHVwZGF0ZU5v
cm1hbEZsb3dMaXN0KCk7CiAKQEAgLTUyOTAsOCArNTMxNywxMSBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKQogICAgICAgICByZWZsZWN0aW9uTGF5ZXItPnVw
ZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CiAgICAgfQogCi0gICAgaWYgKHNob3VsZFVwZGF0ZURlc2Nl
bmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcikgewotICAgICAgICB1cGRhdGVEZXNj
ZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKTsKKyAgICBpZiAoc2hvdWxkVXBk
YXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcikgeworICAgICAgICAvLyBjYWxsIFVwZGF0ZUNhbkJl
U3RhY2tpbmdDb250YWluZXIgZm9yIGFsbCBkZXNjZW5kYW50cywKKyAgICAgICAgLy8gcGFzc2lu
ZyBzZWxmIGluIGFzIGFuY2VzdG9yIHN0YWNraW5nIGNvbnRleHQuCisgICAgICAgIHVwZGF0ZUNh
bkNoaWxkcmVuQmVTdGFja2luZ0NvbnRhaW5lcnModGhpcywgdHJ1ZSk7CisKICAgICAgICAgLy8g
VGhlIGFib3ZlIGZ1bmN0aW9uIGNhbiBjYXVzZSB1cyB0byB1cGRhdGUgbV9uZWVkc0NvbXBvc2l0
ZWRTY3JvbGxpbmcKICAgICAgICAgLy8gYW5kIGRpcnR5IG91ciBsYXllciBsaXN0cy4gUmVmcmVz
aCB0aGVtIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgdXBkYXRlWk9yZGVyTGlzdHMoKTsKQEAgLTU0
NzgsNyArNTUwOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVN0YWNraW5nQ29udGV4dHNB
ZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTCiAgICAgYm9vbCBpc1N0YWNr
aW5nQ29udGV4dCA9IHRoaXMtPmlzU3RhY2tpbmdDb250ZXh0KCk7CiAgICAgaWYgKGlzU3RhY2tp
bmdDb250ZXh0ICE9IHdhc1N0YWNraW5nQ29udGV4dCkgewogICAgICAgICBkaXJ0eVN0YWNraW5n
Q29udGFpbmVyWk9yZGVyTGlzdHMoKTsKLSAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KQor
ICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2luZ0NvbnRhaW5lcigpKQog
ICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0cygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjbGVhclpPcmRlckxpc3RzKCk7CkBAIC01NDg5LDcgKzU1MTksNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJT
dHlsZSogb2xkUwogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4K
ICAgICBpZiAob2xkU3R5bGUtPnpJbmRleCgpICE9IHJlbmRlcmVyKCktPnN0eWxlKCktPnpJbmRl
eCgpIHx8IG9sZFN0eWxlLT52aXNpYmlsaXR5KCkgIT0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpKSB7CiAgICAgICAgIGRpcnR5U3RhY2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygp
OwotICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQpCisgICAgICAgIGlmIChpc1N0YWNraW5n
Q29udGV4dCB8fCBpc1N0YWNraW5nQ29udGFpbmVyKCkpCiAgICAgICAgICAgICBkaXJ0eVpPcmRl
ckxpc3RzKCk7CiAgICAgfQogfQpAQCAtNTU3OCwxNCArNTYwOCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZU91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KQogCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7Ci0gICAgYm9vbCBpc05vcm1hbEZsb3dPbmx5ID0g
c2hvdWxkQmVOb3JtYWxGbG93T25seSgpOwotICAgIGlmIChpc05vcm1hbEZsb3dPbmx5ICE9IG1f
aXNOb3JtYWxGbG93T25seSkgewotICAgICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBpc05vcm1h
bEZsb3dPbmx5OwotICAgICAgICBSZW5kZXJMYXllciogcCA9IHBhcmVudCgpOwotICAgICAgICBp
ZiAocCkKLSAgICAgICAgICAgIHAtPmRpcnR5Tm9ybWFsRmxvd0xpc3QoKTsKLSAgICAgICAgZGly
dHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3RzKCk7Ci0gICAgfQorICAgIHVwZGF0ZUlzTm9y
bWFsRmxvd09ubHkoKTsKIAogICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1go
KSA9PSBPTUFSUVVFRSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5tYXJxdWVlQmVoYXZpb3IoKSAh
PSBNTk9ORSAmJiByZW5kZXJlcigpLT5pc0JveCgpKSB7CiAgICAgICAgIGlmICghbV9tYXJxdWVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCAwYjY3NDUzM2U2ZDUy
ZDI2NWJjMDViOWEzN2NhMzcyMmIzNmYyOGRmLi4yZjQ0NDM0MWEyNTRkNjhlNWMwMDliOTViY2Ix
YmM3MWQ0YWZiNTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAt
Nzk2LDggKzc5NiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluSGFz
U2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50U3RhdHVzKCk7CiAKICAgICBib29sIGFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSBjb25zdDsKLSAgICB2b2lk
IHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcigpOwotICAgIHZv
aWQgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyUmVjdXJzaXZl
KGNvbnN0IEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBpbnQ+JiwgaW50JiBtaW5JbmRleCwg
aW50JiBtYXhJbmRleCwgaW50JiBjb3VudCwgYm9vbCBmaXJzdEl0ZXJhdGlvbik7CisKKyAgICBi
b29sIGlzUHJvbW90ZWRMYXllckxpc3RJbkNvcnJlY3RTdGFja2luZ09yZGVyKGNvbnN0IFZlY3Rv
cjxjb25zdCBSZW5kZXJMYXllcio+JiwgY29uc3QgVmVjdG9yPGNvbnN0IFJlbmRlckxheWVyKj4m
KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIoUmVuZGVyTGF5
ZXIqKTsKKyAgICB2b2lkIHVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRhaW5lcnMoUmVu
ZGVyTGF5ZXIqLCBib29sKTsKIAogICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9t
ZXRyeU1hcCogPSAwKTsKICAgICB2b2lkIGNvbXB1dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNj
ZW5kYW50cygpOwpAQCAtODE5LDYgKzgyMSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJ0eUFu
Y2VzdG9yQ2hhaW5IYXNPdXRPZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudFN0YXR1cygpOwogICAg
IHZvaWQgdXBkYXRlT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpOwogCisgICAgdm9pZCB1cGRhdGVJc05vcm1hbEZsb3dPbmx5KCk7CiAgICAgdm9pZCB1cGRh
dGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgcG9zaXRpb24gY2hhbmdlZC4KQEAgLTEwNjcsNyArMTA3MCw3IEBAIHByb3RlY3RlZDoKICAg
ICAvLyBJZiB0aGlzIGlzIHRydWUsIHRoZW4gbm8gbm9uLWRlc2NlbmRhbnQgYXBwZWFycyBiZXR3
ZWVuIGFueSBvZiBvdXIKICAgICAvLyBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4gVGhp
cyBpcyBvbmUgb2YgdGhlIHJlcXVpcmVtZW50cyBvZiBiZWluZwogICAgIC8vIGFibGUgdG8gc2Fm
ZWx5IGJlY29tZSBhIHN0YWNraW5nIGNvbnRleHQuCi0gICAgYm9vbCBtX2Rlc2NlbmRhbnRzQXJl
Q29udGlndW91c0luU3RhY2tpbmdPcmRlciA6IDE7CisgICAgYm9vbCBtX2NhbkJlUHJvbW90ZWRU
b1N0YWNraW5nY29udGFpbmVyIDogMTsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1Jvb3RMYXllciA6
IDE7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA5NDcwMmRkNGI3MTAzMDc5ZTI1Y2VhYWEyZmJmYmUwZmIwOTc3MDM3Li5k
MzNlM2EyZDlhNmM4NDQ1ODFhYjk3ZDFjNWU3NGY4ZTcxODc4ZTZhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMTMtMDItMTUgIEdsZW5uIEhhcnRtYW5uICA8aGFydG1hbm5nQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBTaW1wbGlmeSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50
byBjb21wb3NpdGVkIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2Ugc2ltcGxpZnkgdGhlIGxvZ2ljIGZvciBhdXRvbWF0aWNhbGx5IG9w
dGluZyBpbnRvIGNvbXBvc2l0ZWQKKyAgICAgICAgc2Nyb2xsaW5nIGJ5IGdlbmVyYXRpbmcgdHdv
IHNldHMgb2Ygei1vcmRlciBsaXN0cywgZmlyc3QgZm9yY2luZyBhCisgICAgICAgIGxheWVyIHRv
IG5vdCBwcm9tb3RlLCB0aGVuIGZvcmNpbmcgaXQgdG8gcHJvbW90ZSB0aGUgc2Vjb25kIHRpbWUu
IFRoZQorICAgICAgICB0d28gc2V0cyBvZiBsaXN0cyBjYW4gYmUgcmVsYXRpdmVseSBlYXNpbHkg
Y29tcGFyZWQgZm9yIGFueSBwb3NzaWJsZQorICAgICAgICBjaGFuZ2UgaW4gc3RhY2tpbmcgb3Jk
ZXIuIFRoaXMgc2hvdWxkIGJlIG1vcmUgaW50dWl0aXZlIGFuZCBtb3JlCisgICAgICAgIHJvYnVz
dCB0aGFuIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogY29tcG9zaXRp
bmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxs
eS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy5odG1sOgorICAgICAgICAqIGNvbXBvc2l0
aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5j
ZXN0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9vdmVyZmxv
dy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWw6
IEFkZGVkLgorCiAyMDEzLTAyLTA3ICDDgWTDoW0gS2FsbGFpICA8a2FkYW1AaW5mLnUtc3plZ2Vk
Lmh1PgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcuIFNraXAgZmFpbGluZyB0
ZXN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21h
dGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBv
c2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAppbmRleCBkZWVmNTE1MDJiNzlkZDA0ZGE0Nzhk
NTFlZjAyNDk3MThhNjQ5Mjc4Li44YjEzNzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBhYWQ3YmRlZDA4
YmRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0
aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNv
bXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dApAQCAtMSwxMjcgKzEgQEAKLUl0ZXJhdGlv
biAwOiBQYXNzZWQKLUl0ZXJhdGlvbiAwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTogUGFzc2Vk
Ci1JdGVyYXRpb24gMSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI6IFBhc3NlZAotSXRlcmF0aW9u
IDIsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzOiBQYXNzZWQKLUl0ZXJhdGlvbiAzLCBsYXllciB0
cmVlCi1JdGVyYXRpb24gNDogUGFzc2VkCi1JdGVyYXRpb24gNCwgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDU6IFBhc3NlZAotSXRlcmF0aW9uIDUsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA2OiBQYXNz
ZWQKLUl0ZXJhdGlvbiA2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNzogUGFzc2VkCi1JdGVyYXRp
b24gNywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDg6IFBhc3NlZAotSXRlcmF0aW9uIDgsIG5vIGxh
eWVyIHRyZWUKLUl0ZXJhdGlvbiA5OiBQYXNzZWQKLUl0ZXJhdGlvbiA5LCBubyBsYXllciB0cmVl
Ci1JdGVyYXRpb24gMTA6IFBhc3NlZAotSXRlcmF0aW9uIDEwLCBsYXllciB0cmVlCi1JdGVyYXRp
b24gMTE6IFBhc3NlZAotSXRlcmF0aW9uIDExLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTI6IFBh
c3NlZAotSXRlcmF0aW9uIDEyLCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTM6IFBhc3NlZAot
SXRlcmF0aW9uIDEzLCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTQ6IFBhc3NlZAotSXRlcmF0
aW9uIDE0LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTU6IFBhc3NlZAotSXRlcmF0aW9uIDE1
LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTY6IFBhc3NlZAotSXRlcmF0aW9uIDE2LCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gMTc6IFBhc3NlZAotSXRlcmF0aW9uIDE3LCBubyBsYXllciB0
cmVlCi1JdGVyYXRpb24gMTg6IFBhc3NlZAotSXRlcmF0aW9uIDE4LCBubyBsYXllciB0cmVlCi1J
dGVyYXRpb24gMTk6IFBhc3NlZAotSXRlcmF0aW9uIDE5LCBubyBsYXllciB0cmVlCi1JdGVyYXRp
b24gMjA6IFBhc3NlZAotSXRlcmF0aW9uIDIwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjE6IFBh
c3NlZAotSXRlcmF0aW9uIDIxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjI6IFBhc3NlZAotSXRl
cmF0aW9uIDIyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjM6IFBhc3NlZAotSXRlcmF0aW9uIDIz
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjQ6IFBhc3NlZAotSXRlcmF0aW9uIDI0LCBsYXllciB0
cmVlCi1JdGVyYXRpb24gMjU6IFBhc3NlZAotSXRlcmF0aW9uIDI1LCBsYXllciB0cmVlCi1JdGVy
YXRpb24gMjY6IFBhc3NlZAotSXRlcmF0aW9uIDI2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjc6
IFBhc3NlZAotSXRlcmF0aW9uIDI3LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjg6IFBhc3NlZAot
SXRlcmF0aW9uIDI4LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjk6IFBhc3NlZAotSXRlcmF0aW9u
IDI5LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzA6IFBhc3NlZAotSXRlcmF0aW9uIDMwLCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMzE6IFBhc3NlZAotSXRlcmF0aW9uIDMxLCBsYXllciB0cmVlCi1J
dGVyYXRpb24gMzI6IFBhc3NlZAotSXRlcmF0aW9uIDMyLCBsYXllciB0cmVlCi1JdGVyYXRpb24g
MzM6IFBhc3NlZAotSXRlcmF0aW9uIDMzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzQ6IFBhc3Nl
ZAotSXRlcmF0aW9uIDM0LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMzU6IFBhc3NlZAotSXRl
cmF0aW9uIDM1LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMzY6IFBhc3NlZAotSXRlcmF0aW9u
IDM2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzc6IFBhc3NlZAotSXRlcmF0aW9uIDM3LCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMzg6IFBhc3NlZAotSXRlcmF0aW9uIDM4LCBubyBsYXllciB0cmVl
Ci1JdGVyYXRpb24gMzk6IFBhc3NlZAotSXRlcmF0aW9uIDM5LCBubyBsYXllciB0cmVlCi1JdGVy
YXRpb24gNDA6IFBhc3NlZAotSXRlcmF0aW9uIDQwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDE6
IFBhc3NlZAotSXRlcmF0aW9uIDQxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDI6IFBhc3NlZAot
SXRlcmF0aW9uIDQyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDM6IFBhc3NlZAotSXRlcmF0aW9u
IDQzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDQ6IFBhc3NlZAotSXRlcmF0aW9uIDQ0LCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gNDU6IFBhc3NlZAotSXRlcmF0aW9uIDQ1LCBsYXllciB0cmVlCi1J
dGVyYXRpb24gNDY6IFBhc3NlZAotSXRlcmF0aW9uIDQ2LCBsYXllciB0cmVlCi1JdGVyYXRpb24g
NDc6IFBhc3NlZAotSXRlcmF0aW9uIDQ3LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDg6IFBhc3Nl
ZAotSXRlcmF0aW9uIDQ4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNDk6IFBhc3NlZAotSXRl
cmF0aW9uIDQ5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTA6IFBhc3NlZAotSXRlcmF0aW9u
IDUwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTE6IFBhc3NlZAotSXRlcmF0aW9uIDUxLCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gNTI6IFBhc3NlZAotSXRlcmF0aW9uIDUyLCBsYXllciB0cmVlCi1J
dGVyYXRpb24gNTM6IFBhc3NlZAotSXRlcmF0aW9uIDUzLCBsYXllciB0cmVlCi1JdGVyYXRpb24g
NTQ6IFBhc3NlZAotSXRlcmF0aW9uIDU0LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTU6IFBh
c3NlZAotSXRlcmF0aW9uIDU1LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTY6IFBhc3NlZAot
SXRlcmF0aW9uIDU2LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTc6IFBhc3NlZAotSXRlcmF0
aW9uIDU3LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTg6IFBhc3NlZAotSXRlcmF0aW9uIDU4
LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTk6IFBhc3NlZAotSXRlcmF0aW9uIDU5LCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gNjA6IFBhc3NlZAotSXRlcmF0aW9uIDYwLCBsYXllciB0cmVl
Ci1JdGVyYXRpb24gNjE6IFBhc3NlZAotSXRlcmF0aW9uIDYxLCBubyBsYXllciB0cmVlCi1JdGVy
YXRpb24gNjI6IFBhc3NlZAotSXRlcmF0aW9uIDYyLCBsYXllciB0cmVlCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8t
Y29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJm
bG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAppbmRl
eCAxZTY3YjVkZDc4ZmI3MTFiYmUxNGMxNjYxODgzMmU2MTFkYWZhZjQwLi5lNDYyOWRiY2FjMzY2
MmVhZDA3ZTZiNWNlMThlYzIyZTA3YmFlZGZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jb21w
b3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xs
aW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGlj
YWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy5odG1sCkBAIC0xMiwxMiArMTIsMTQg
QEAKICAgICAgIG92ZXJmbG93OiBzY3JvbGw7CiAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICBi
b3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMEZGRkY7
CiAgICAgfQogCiAgICAgLnNjcm9sbGVkIHsKICAgICAgIHdpZHRoOiAxODBweDsKLSAgICAgIGhl
aWdodDogOTBweDsKKyAgICAgIGhlaWdodDogMzBweDsKICAgICAgIG1hcmdpbjogMTBweDsKKyAg
ICAgIHRvcDogNzBweDsKICAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CiAgICAgICBwb3Np
dGlvbjogcmVsYXRpdmU7CiAgICAgfQpAQCAtMjUsMjUgKzI3LDMyIEBACiAgICAgLnBvc2l0aW9u
ZWQgewogICAgICAgd2lkdGg6IDEyMHB4OwogICAgICAgaGVpZ2h0OiAyNDBweDsKLSAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyZWVuOwogICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgIH0K
IAorICAgICNzZWNvbmRDaGlsZCB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0M5OTk5Owor
ICAgICAgdG9wOiA1MHB4OworICAgIH0KKwogICAgICNwcmVkZWNlc3NvciB7CiAgICAgICBsZWZ0
OiAyMHB4OwogICAgICAgdG9wOiAyMHB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5MDA2
NjsKICAgICB9CiAKICAgICAjc3VjY2Vzc29yIHsKLSAgICAgIGxlZnQ6IDE2MHB4OworICAgICAg
bGVmdDogMjBweDsKICAgICAgIHRvcDogMjBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICMw
MDAwNjY7CiAgICAgfQogCi0gICAgI2Rlc2NlbmRhbnQgewotICAgICAgbGVmdDogOTBweDsKLSAg
ICAgIHRvcDogMjBweDsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7Ci0gICAgICB6LWlu
ZGV4OiAtMjA7CisgICAgI25vcm1hbEZsb3cgeworICAgICAgd2lkdGg6IDE4MHB4OworICAgICAg
aGVpZ2h0OiAzMHB4OworICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgdG9wOiAtMjBweDsKKyAg
ICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKICAgICB9CiAgIDwvc3R5bGU+CiAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CkBAIC01Miw5ICs2MSw2
IEBACiAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CiAKLSAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgIHdpbmRvdy5pbnRlcm5h
bHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5h
YmxlZCh0cnVlKTsKLQogICAgIGZ1bmN0aW9uIHdyaXRlKHN0cikKICAgICB7CiAgICAgICB2YXIg
cHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKQEAgLTYyLDE2OSArNjgs
MTk0IEBACiAgICAgICBwcmUuYXBwZW5kQ2hpbGQodGV4dCk7CiAgICAgfQogCi0gICAgdmFyIGl0
ZXJhdGlvbiA9IDA7Ci0gICAgZnVuY3Rpb24gcHJpbnRSZXN1bHQoZXhwZWN0ZWRSZXN1bHQpCisg
ICAgZnVuY3Rpb24gZGlkT3B0SW4oKQorICAgIHsKKyAgICAgIC8vIEZvcmNlIGEgc3R5bGUgcmVj
YWxjLgorICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIC8vIEZvcmNlIGEg
bGF5b3V0LgorICAgICAgd2luZG93LmludGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOwor
ICAgICAgdmFyIGxheWVyVHJlZSA9IHdpbmRvdy5pbnRlcm5hbHMubGF5ZXJUcmVlQXNUZXh0KGRv
Y3VtZW50KTsKKworICAgICAgaWYgKGRlYnVnTW9kZSkKKyAgICAgICAgICB3cml0ZShsYXllclRy
ZWUpOworCisgICAgICByZXR1cm4gISFsYXllclRyZWU7CisgICAgfQorCisgICAgZnVuY3Rpb24g
Z2V0U3RhY2tpbmdPcmRlcigpCiAgICAgeworICAgICAgdmFyIGRpdkVsZW1lbnRzID0gW107CiAg
ICAgICAvLyBGb3JjZSBhIHN0eWxlIHJlY2FsYy4KICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0
VG9wOwogCi0gICAgICBpZiAod2luZG93LmludGVybmFscykgewotICAgICAgICAvLyBGb3JjZSBh
IGxheW91dC4KLSAgICAgICAgd2luZG93LmludGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIp
OwotICAgICAgICB2YXIgbGF5ZXJUcmVlID0gd2luZG93LmludGVybmFscy5sYXllclRyZWVBc1Rl
eHQoZG9jdW1lbnQpOwotCi0gICAgICAgIGlmICghbGF5ZXJUcmVlID09ICFleHBlY3RlZFJlc3Vs
dCkKLSAgICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJpbmcoKSAr
ICc6IFBhc3NlZCcpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcg
KyBpdGVyYXRpb24udG9TdHJpbmcoKSArICc6IEZBSUxFRCcpCi0KLSAgICAgICAgaWYgKGxheWVy
VHJlZSkgewotICAgICAgICAgIHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmlu
ZygpICsgJywgbGF5ZXIgdHJlZScpOwotICAgICAgICAgIGlmIChkZWJ1Z01vZGUpCi0gICAgICAg
ICAgICAgIHdyaXRlKGxheWVyVHJlZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHdyaXRl
KCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmluZygpICsgJywgbm8gbGF5ZXIgdHJlZScp
OworICAgICAgLy8gRm9yY2UgYSBsYXlvdXQuCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5k
aW5nQm94KGNvbnRhaW5lcik7CisKKyAgICAgIHZhciBzdGFja2luZ09yZGVyID0gd2luZG93Lmlu
dGVybmFscy5ub2Rlc0Zyb21SZWN0KGRvY3VtZW50LCAxMDAsIDc1LCAyMDAsIDIwMCwgMjAwLCAy
MDAsIGZhbHNlLCBmYWxzZSk7CisKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2tpbmdP
cmRlci5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoc3RhY2tpbmdPcmRlcltpXS5ub2RlTmFt
ZSA9PT0gIkRJViIpIHsKKyAgICAgICAgICBkaXZFbGVtZW50cy5wdXNoKHN0YWNraW5nT3JkZXJb
aV0pOworICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpdGVyYXRpb24rKzsKKworICAgICAgcmV0
dXJuIGRpdkVsZW1lbnRzOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGRvVGVzdCgpCiAgICAgewor
ICAgICAgdmFyIGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuY2VzdG9yJyk7
CiAgICAgICB2YXIgcHJlZGVjZXNzb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlZGVj
ZXNzb3InKTsKICAgICAgIHZhciBzdWNjZXNzb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3VjY2Vzc29yJyk7CiAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnRhaW5lcicpOwogICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZmlyc3RDaGlsZCcpOwogICAgICAgdmFyIHNlY29uZENoaWxkID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NlY29uZENoaWxkJyk7Ci0gICAgICB2YXIgZGVzY2VuZGFudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXNjZW5kYW50Jyk7CiAgICAgICB2YXIgY291bnQgPSAw
OwogCi0gICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0KLSAgICAgIC8v
IGRlc2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLgotICAgICAgZm9yIChpID0gMDsgaSA8IDM7
ICsraSkgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgNTsgKytqKSB7Ci0gICAgICAgICAgZm9y
IChrID0gMDsgayA8IDI7ICsraykgewotICAgICAgICAgICAgZm9yIChsID0gMDsgbCA8IDI7ICsr
bCkgewotICAgICAgICAgICAgICB2YXIgbWluWkluZGV4ID0gMDsKLSAgICAgICAgICAgICAgdmFy
IG1heFpJbmRleCA9IDA7Ci0gICAgICAgICAgICAgIGlmIChpID09IDApIHsKLSAgICAgICAgICAg
ICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICcxJzsKLSAgICAgICAgICAgICAgICBzZWNv
bmRDaGlsZC5zdHlsZS56SW5kZXggPSAnMyc7Ci0gICAgICAgICAgICAgICAgbWF4WkluZGV4ID0g
MzsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IDEpIHsKLSAgICAgICAgICAgICAgICBm
aXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICctMSc7Ci0gICAgICAgICAgICAgICAgc2Vjb25kQ2hp
bGQuc3R5bGUuekluZGV4ID0gJy0zJzsKLSAgICAgICAgICAgICAgICBtaW5aSW5kZXggPSAtMzsK
LSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaXJzdENoaWxkLnN0eWxl
LnpJbmRleCA9ICctMSc7Ci0gICAgICAgICAgICAgICAgc2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4
ID0gJzMnOwotICAgICAgICAgICAgICAgIG1pblpJbmRleCA9IC0xOwotICAgICAgICAgICAgICAg
IG1heFpJbmRleCA9IDM7Ci0gICAgICAgICAgICAgIH0KKyAgICAgIGZvciAodmFyIHNpYmxpbmdT
aG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVyID0gMDsgc2libGluZ1Nob3VsZEJlWmVyb0lm
UHJlY2VkZXNDb250YWluZXIgPD0gMTsgKytzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRlc0Nv
bnRhaW5lcikgeworICAgICAgICBmb3IgKHZhciBjb250YWluZXJJc1Bvc2l0aW9uZWQgPSAwOyBj
b250YWluZXJJc1Bvc2l0aW9uZWQgPD0gMTsgKytjb250YWluZXJJc1Bvc2l0aW9uZWQpIHsKKyAg
ICAgICAgICBmb3IgKHZhciBzaWJsaW5nSXNTdWNjZXNzb3IgPSAwOyBzaWJsaW5nSXNTdWNjZXNz
b3IgPD0gMTsgKytzaWJsaW5nSXNTdWNjZXNzb3IpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGhh
c1Bvc2l0aW9uZWRBbmNlc3RvciA9IDA7IGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA8PSAxOyArK2hh
c1Bvc2l0aW9uZWRBbmNlc3RvcikgeworICAgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IFsgMCwg
MSwgMiwgMyBdOworICAgICAgICAgICAgICBmb3IgKHZhciBzaWJsaW5nSW5kZXggPSAwOyBzaWJs
aW5nSW5kZXggPCA0OyArK3NpYmxpbmdJbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBzaWJs
aW5nSW5kaWNlcyA9IGluZGljZXMuc2xpY2UoMCk7CisgICAgICAgICAgICAgICAgc2libGluZ0lu
ZGljZXMuc3BsaWNlKHNpYmxpbmdJbmRleCwgMSk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
Y29udGFpbmVyU3ViaW5kZXggPSAwOyBjb250YWluZXJTdWJpbmRleCA8IDM7ICsrY29udGFpbmVy
U3ViaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJJbmRpY2VzID0gc2li
bGluZ0luZGljZXMuc2xpY2UoMCk7CisgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVySW5k
ZXggPSBjb250YWluZXJJbmRpY2VzW2NvbnRhaW5lclN1YmluZGV4XTsKKyAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5lckluZGljZXMuc3BsaWNlKGNvbnRhaW5lclN1YmluZGV4LCAxKTsKKyAgICAg
ICAgICAgICAgICAgIHZhciBmaXJzdENoaWxkSW5kZXggPSBjb250YWluZXJJbmRpY2VzWzBdOwor
ICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZENoaWxkSW5kZXggPSBjb250YWluZXJJbmRpY2Vz
WzFdOwogCi0gICAgICAgICAgICAgIHZhciBzaWJsaW5nID0gcHJlZGVjZXNzb3I7Ci0gICAgICAg
ICAgICAgIHZhciB0b0hpZGUgPSBzdWNjZXNzb3I7Ci0gICAgICAgICAgICAgIGlmIChrID09IDEp
IHsKLSAgICAgICAgICAgICAgICBzaWJsaW5nID0gc3VjY2Vzc29yOwotICAgICAgICAgICAgICAg
IHRvSGlkZSA9IHByZWRlY2Vzc29yOwotICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICB2YXIgc2libGluZ1ByZWNlZGVzQ29udGFpbmVyID0gc2libGluZ0luZGV4ID09IGNvbnRhaW5l
ckluZGV4IC0gMTsKKyAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkSW5kZXggPiBzZWNv
bmRDaGlsZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAxICYmIGhhc1Bvc2l0aW9uZWRB
bmNlc3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgICAgaWYgKHNpYmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVyID09IDEg
JiYgIXNpYmxpbmdQcmVjZWRlc0NvbnRhaW5lcikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgICAgICAgIHZhciBvcmRlcmluZyA9IFsgbnVsbCwgbnVsbCwgbnVs
bCwgbnVsbCBdOworICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbc2libGluZ0luZGV4XSA9IHNp
YmxpbmdJc1N1Y2Nlc3NvciA9PSAxID8gc3VjY2Vzc29yIDogcHJlZGVjZXNzb3I7CisgICAgICAg
ICAgICAgICAgICBvcmRlcmluZ1tjb250YWluZXJJbmRleF0gPSBoYXNQb3NpdGlvbmVkQW5jZXN0
b3IgPT0gMSA/IGFuY2VzdG9yIDogY29udGFpbmVyOworICAgICAgICAgICAgICAgICAgb3JkZXJp
bmdbZmlyc3RDaGlsZEluZGV4XSA9IGZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAgICAgICBvcmRl
cmluZ1tzZWNvbmRDaGlsZEluZGV4XSA9IHNlY29uZENoaWxkOworCisgICAgICAgICAgICAgICAg
ICB2YXIgc2libGluZyA9IHByZWRlY2Vzc29yOworICAgICAgICAgICAgICAgICAgdmFyIHRvSGlk
ZSA9IHN1Y2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nSXNTdWNjZXNzb3Ig
PT0gMSkgeworICAgICAgICAgICAgICAgICAgICBzaWJsaW5nID0gc3VjY2Vzc29yOworICAgICAg
ICAgICAgICAgICAgICB0b0hpZGUgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgdG9IaWRlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAg
ICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnJzsKKworICAgICAgICAgICAg
ICAgICAgdmFyIHBvc2l0aW9uZWQgPSBudWxsOworICAgICAgICAgICAgICAgICAgaWYgKGNvbnRh
aW5lcklzUG9zaXRpb25lZCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5z
dHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9u
ZWQgPSBjb250YWluZXI7CisgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJyc7CiAKLSAgICAgICAgICAgICAgLy8g
VGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUgaWYgdGhlIHRoZSBlbGVtZW50IHRvIGhpZGUg
aXMKLSAgICAgICAgICAgICAgLy8gZGlzcGxheTpoaWRkZW4gb3IgZGlzcGxheTpub25lLgotICAg
ICAgICAgICAgICBpZiAobCA9PSAwKQotICAgICAgICAgICAgICAgIHRvSGlkZS5zdHlsZS5kaXNw
bGF5ID0gJ25vbmUnOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdG9IaWRl
LnN0eWxlLmRpc3BsYXkgPSAnaGlkZGVuJzsKLQotICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxl
LmRpc3BsYXkgPSAnJzsKLQotICAgICAgICAgICAgICBpZiAoaiA9PSAwKQotICAgICAgICAgICAg
ICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gKG1heFpJbmRleCArIDEpLnRvU3RyaW5nKCk7Ci0g
ICAgICAgICAgICAgIGVsc2UgaWYgKGogPT0gMSkKLSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0
eWxlLnpJbmRleCA9IChtaW5aSW5kZXggLSAxKS50b1N0cmluZygpOwotICAgICAgICAgICAgICBl
bHNlIGlmIChqID09IDIpCi0gICAgICAgICAgICAgICAgc2libGluZy5zdHlsZS56SW5kZXggPSBt
YXhaSW5kZXgudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoaiA9PSAzKQotICAg
ICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gbWluWkluZGV4LnRvU3RyaW5nKCk7
Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRl
eCA9ICgobWluWkluZGV4ICsgbWF4WkluZGV4KSAvIDIpLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAg
ICAgICAgdmFyIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgaWYgKHNpYmxp
bmcuc3R5bGUuekluZGV4ID4gbWF4WkluZGV4IHx8Ci0gICAgICAgICAgICAgICAgICBzaWJsaW5n
LnN0eWxlLnpJbmRleCA8IG1pblpJbmRleCkgewotICAgICAgICAgICAgICAgICAgLy8gc2libGlu
ZyBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBvdXIgZGVzY2VuZGFudHMuCi0gICAgICAgICAgICAg
ICAgICBhcmVDb250aWd1b3VzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWJs
aW5nLnN0eWxlLnpJbmRleCA8IG1heFpJbmRleCAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
IHNpYmxpbmcuc3R5bGUuekluZGV4ID4gbWluWkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAv
LyBzaWJsaW5nIGlzIGJldHdlZW4gb3VyIGRlc2NlbmRhbnRzLgotICAgICAgICAgICAgICAgICAg
YXJlQ29udGlndW91cyA9IGZhbHNlOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpYmxpbmcu
c3R5bGUuekluZGV4ID09IG1pblpJbmRleCkgewotICAgICAgICAgICAgICAgICAgaWYgKG1pblpJ
bmRleCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBsaWVzIGJldHdl
ZW4gdXMgKG5vcm1hbCBmbG93KSBhbmQgb3VyIHBvcwotICAgICAgICAgICAgICAgICAgICAgIC8v
IHotb3JkZXIgZGVzY2VuZGFudHMsIHNvIHdlIGFyZSBub3QgY29udGlndW91cy4KLSAgICAgICAg
ICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcncyB6SW5kZXggbWF0Y2hl
cyB0aGUgbWluOyB3ZSdyZSBvbmx5IG9rIGlmIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgLy8g
YXBwZWFycyBmaXJzdC4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gayA9
PSAwOworICAgICAgICAgICAgICAgICAgaWYgKGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZl
JzsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCA9IGFuY2VzdG9yOworICAgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLnN0eWxlLnBvc2l0
aW9uID0gJyc7CisKKyAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB6LWluZGljZXMuCisgICAg
ICAgICAgICAgICAgICBpZiAoY29udGFpbmVySXNQb3NpdGlvbmVkID09IDEgfHwgaGFzUG9zaXRp
b25lZEFuY2VzdG9yID09IDEpCisgICAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW2NvbnRhaW5l
ckluZGV4XS5zdHlsZS56SW5kZXggPSAnMCc7CisgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnpJbmRleCA9ICcnOworICAgICAgICAg
ICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS56SW5kZXggPSAnJzsKICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA9PSBtYXha
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChtYXhaSW5kZXggPCAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgLy8gc2libGluZyBsaWVzIGJldHdlZW4gdXMgKG5vcm1hbCBmbG93KSBh
bmQgbmVnIHotb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNjZW5kYW50cywgc28g
d2UgYXJlIG5vdCBjb250aWd1b3VzLgotICAgICAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3Vv
dXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4WkluZGV4ID09IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIGlzIGluIHRoZSBwb3Mgei1vcmRl
ciBsaXN0IGFuZCBkb2VzIG5vdCBhZmZlY3QKLSAgICAgICAgICAgICAgICAgICAgICAvLyB1cyBz
aW5jZSB3ZSdyZSBpbiB0aGUgbm9ybWFsIGZsb3cgbGlzdCBhbmQgb3VyCi0gICAgICAgICAgICAg
ICAgICAgICAgLy8gZGVzY2FuZGFudHMgYXJlIGluIHRoZSBuZWcgei1vcmRlciBsaXN0LgotICAg
ICAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nJ3MgekluZGV4IG1h
dGNoZXMgdGhlIG1heDsgd2UncmUgb25seSBvayBpZiBpdAotICAgICAgICAgICAgICAgICAgICAg
IC8vIGFwcGVhcnMgYWZ0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9
IGsgPT0gMTsKKworICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRaSW5kZXggPSBzaWJsaW5n
UHJlY2VkZXNDb250YWluZXIgJiYgc2libGluZ1Nob3VsZEJlWmVyb0lmUHJlY2VkZXNDb250YWlu
ZXIgPT0gMSA/IDAgOiAtMTsKKyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1cnJlbnRJbmRl
eCA9IGNvbnRhaW5lckluZGV4IC0gMTsgY3VycmVudEluZGV4ID49IDA7IC0tY3VycmVudEluZGV4
KSB7CisgICAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW2N1cnJlbnRJbmRleF0uc3R5bGUueklu
ZGV4ID0gY3VycmVudFpJbmRleC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50WkluZGV4LS07CiAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICBwcmludFJlc3VsdChhcmVDb250aWd1b3VzKTsKLSAgICAgICAgICAgIH0gLy8g
Zm9yIGwKLSAgICAgICAgICB9IC8vIGZvciBrCi0gICAgICAgIH0gLy8gZm9yIGoKLSAgICAgIH0g
Ly8gZm9yIGkKLQotICAgICAgLy8gTm93IGNoZWNrIHRoYXQgd2UgZG9uJ3QgcHJvbW90ZSBpZiB3
ZSBoYXZlIGFuIG91dCBvZiBmbG93IGRlc2NlbmRhbnQuCi0gICAgICAvLyBXZSBuZWVkIHRvIGhp
ZGUgdGhlIHByZWRlY2Vzc29yIGFuZCBzdWNjZXNzb3Igc28gdGhleSBkb24ndCBpbnRlcmZlcmUK
LSAgICAgIC8vIHdpdGggdGhpcyBleHBlcmltZW50LgotICAgICAgcHJlZGVjZXNzb3Iuc3R5bGUu
ZGlzcGxheSA9ICdub25lJzsKLSAgICAgIHN1Y2Nlc3Nvci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
OwotICAgICAgZm9yIChpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAoaSA9PSAwKQot
ICAgICAgICAgIGRlc2NlbmRhbnQuc3R5bGUuZGlzcGxheSA9ICdoaWRkZW4nOwotICAgICAgICBl
bHNlIGlmIChpID09IDEpCi0gICAgICAgICAgZGVzY2VuZGFudC5zdHlsZS5kaXNwbGF5ID0gJyc7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAnbm9u
ZSc7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG91dCBvZiBmbG93IHBvc2l0aW9uZWQgZGVzY2VuZGFu
dCBpcyB2aXNpYmxlLCB3ZSBjYW5ub3Qgb3B0Ci0gICAgICAgIC8vIGludG8gY29tcG9zaXRlZCBz
Y3JvbGxpbmcuCi0gICAgICAgIHByaW50UmVzdWx0KGkgIT0gMSk7Ci0gICAgICAgIGNvdW50Kys7
Ci0gICAgICB9IC8vIGZvciBpCisgICAgICAgICAgICAgICAgICBjdXJyZW50WkluZGV4ID0gMTsK
KyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1cnJlbnRJbmRleCA9IGNvbnRhaW5lckluZGV4
ICsgMTsgY3VycmVudEluZGV4IDwgNDsgKytjdXJyZW50SW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3JkZXJpbmdbY3VycmVudEluZGV4XS5zdHlsZS56SW5kZXggPSBjdXJyZW50WkluZGV4
LnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRaSW5kZXgrKzsKKyAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVsb3csIHdoZW4gd2Ugc2V0IHdlYmtpdFRyYW5z
Zm9ybSB0byAnJywgd2Ugd2FudCB0aGF0IHRvIGZvcmNlIGEgc3R5bGUgcmVjYWxjdWxhdGlvbi4K
KyAgICAgICAgICAgICAgICAgICAgLy8gTWFraW5nIHRoaXMgbm90ICcnIGhlcmUgd2lsbCBmb3Jj
ZSB0aGlzIHJlY2FsY3VsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHls
ZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWigwcHgpJzsKKyAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9y
Y2UgdG8gbm90IHByb21vdGUuCisgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMu
c2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxl
ZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFu
c2Zvcm0gPSAnJzsKKworICAgICAgICAgICAgICAgICAgICB2YXIgb2xkU3RhY2tpbmdPcmRlciA9
IGdldFN0YWNraW5nT3JkZXIoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZSB0byBw
cm9tb3RlLgorICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJh
bnNsYXRlWigwcHgpJzsKKworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3U3RhY2tpbmdPcmRl
ciA9IGdldFN0YWNraW5nT3JkZXIoKTsKIAorICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxk
T3B0SW4gPSBvbGRTdGFja2luZ09yZGVyLmxlbmd0aCA9PSBuZXdTdGFja2luZ09yZGVyLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGRTdGFja2luZ09y
ZGVyLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFN0YWNraW5n
T3JkZXJbaV0gIT0gbmV3U3RhY2tpbmdPcmRlcltpXSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2hvdWxkT3B0SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnJzsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZE9wdEluICE9IGRpZE9wdEluKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2hvdWxkT3B0SW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlKCJGQUlMIC0gc2hvdWxkJ3ZlIGF1dG9tYXRpY2FsbHkgb3B0ZWQgaW4gYnV0IGRpZG4n
dCAiICsgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZSgnRkFJTCAtIGF1dG9tYXRpY2FsbHkgb3B0ZWQgaW4gYW5kIGNo
YW5nZWQgc3RhY2tpbmcgb3JkZXIgJyArIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KICAgICB9IC8vIGZ1
bmN0aW9uIGRvVGVzdAogCisgICAgZnVuY3Rpb24gdG9nZ2xlKCkgeworICAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKKyAgICAgIGNvbnRh
aW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBjb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNm
b3JtID8gJycgOiAndHJhbnNsYXRlWigwcHgpJzsKKworICAgICAgLy8gRm9yY2UgYSBzdHlsZSBy
ZWNhbGMuCisgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKworICAgICAgLy8gRm9yY2Ug
YSBsYXlvdXQuCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7
CisgICAgfQorCiAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZh
bHNlKTsKICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CiAKIDxib2R5PgotICA8ZGl2IGNsYXNzPSJwb3Np
dGlvbmVkIiBpZD0icHJlZGVjZXNzb3IiPjwvZGl2PgotICA8ZGl2IGNsYXNzPSJjb250YWluZXIi
IGlkPSJjb250YWluZXIiPgotICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0iZmlyc3RDaGls
ZCI+PC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJzZWNvbmRDaGlsZCI+PC9k
aXY+Ci0gICAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9ImRlc2NlbmRhbnQiPjwvZGl2Pgor
ICA8ZGl2IGlkPSJhbmNlc3RvciI+CisgICAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InBy
ZWRlY2Vzc29yIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIGlkPSJjb250YWlu
ZXIiPgorICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJmaXJzdENoaWxkIj48L2Rpdj4K
KyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0ic2Vjb25kQ2hpbGQiPjwvZGl2PgorICAg
ICAgPGRpdiBpZD0ibm9ybWFsRmxvdyI+PC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFz
cz0icG9zaXRpb25lZCIgaWQ9InN1Y2Nlc3NvciI+PC9kaXY+CiAgIDwvZGl2PgotICA8ZGl2IGNs
YXNzPSJwb3NpdGlvbmVkIiBpZD0ic3VjY2Vzc29yIj48L2Rpdj4KICAgPHByZSBpZD0iY29uc29s
ZSI+PC9wcmU+CiA8L2JvZHk+CiA8L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9u
ZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZs
b3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZThjMTBkYmExZjhhYmFjYTRkZjI5MTMxOWFmMmUyY2I3Njdh
NjlkOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93
L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorUGFzc2VkIC0gbGF5ZXIgdHJlZS4KKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1z
Y3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRp
bmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNl
c3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjA1YWU5ZGFjNTU0MGE5OGUwYmJkZDUwMjg4ZDM2NDdk
M2MwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxv
dy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWwK
QEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRN
TCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv
bG9vc2UuZHRkIj4KKworPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1
aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+Cisg
IDx0aXRsZT5PcHRpbmcgaW50byBjb21wb3NpdGVkIHNjcm9sbGluZzwvdGl0bGU+CisgIDxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgLmNvbnRhaW5lciB7CisgICAg
ICB3aWR0aDogMjAwcHg7CisgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgb3ZlcmZsb3c6IHNj
cm9sbDsKKyAgICAgIG1hcmdpbjogMjBweDsKKyAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNr
OworICAgIH0KKworICAgIC5zY3JvbGxlZCB7CisgICAgICB3aWR0aDogMTgwcHg7CisgICAgICBo
ZWlnaHQ6IDkwcHg7CisgICAgICBtYXJnaW46IDEwcHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBncmF5OworICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKworICAgIC5wb3NpdGlv
bmVkIHsKKyAgICAgIHdpZHRoOiAxMjBweDsKKyAgICAgIGhlaWdodDogMjQwcHg7CisgICAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgfQorCisgICAgI2ZpcnN0Q2hpbGQgeworICAgICAgei1p
bmRleDogMTsKKyAgICB9CisKKyAgICAjc2Vjb25kQ2hpbGQgeworICAgICAgei1pbmRleDogMjsK
KyAgICB9CisKKyAgICAjcHJlZGVjZXNzb3IgeworICAgICAgbGVmdDogMjBweDsKKyAgICAgIHRv
cDogMjBweDsKKyAgICAgIHotaW5kZXg6IDA7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVl
bjsKKyAgICB9CisKKyAgICAjYW5jZXN0b3IgeworICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1
ZTsKKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgICB2YXIgZGVidWdNb2RlID0gZmFsc2U7CisKKyAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5z
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKHRydWUpOwor
CisgICAgZnVuY3Rpb24gd3JpdGUoc3RyKQorICAgIHsKKyAgICAgIHZhciBwcmUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAgICAgdmFyIHRleHQgPSBkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShzdHIgKyAnXG4nKTsKKyAgICAgIHByZS5hcHBlbmRDaGlsZCh0ZXh0KTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBkb1Rlc3QoKQorICAgIHsKKyAgICAgIHZhciBwcmVkZWNl
c3NvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVkZWNlc3NvcicpOworICAgICAgdmFy
IGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuY2VzdG9yJyk7CisgICAgICB2
YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOworICAg
ICAgdmFyIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3RDaGlsZCcp
OworICAgICAgdmFyIHNlY29uZENoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29u
ZENoaWxkJyk7CisKKyAgICAgIC8vIEZvcmNlIGEgc3R5bGUgcmVjYWxjLgorICAgICAgZG9jdW1l
bnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAg
ICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5n
Qm94KGNvbnRhaW5lcik7CisgICAgICAgIHZhciBsYXllclRyZWUgPSB3aW5kb3cuaW50ZXJuYWxz
LmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCk7CisKKyAgICAgICAgaWYgKCFsYXllclRyZWUpCisg
ICAgICAgICAgd3JpdGUoJ0ZBSUxFRCAtIG5vIGxheWVyIHRyZWUuJykKKyAgICAgICAgZWxzZQor
ICAgICAgICAgIHdyaXRlKCdQYXNzZWQgLSBsYXllciB0cmVlLicpCisKKyAgICAgICAgaWYgKGxh
eWVyVHJlZSAmJiBkZWJ1Z01vZGUpCisgICAgICAgICAgICB3cml0ZShsYXllclRyZWUpOworICAg
ICAgfQorICAgIH0gLy8gZnVuY3Rpb24gZG9UZXN0CisKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHk+CisgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJwcmVkZWNlc3NvciI+PC9kaXY+Cisg
IDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJhbmNlc3RvciI+CisgICAgPGRpdiBjbGFzcz0i
Y29udGFpbmVyIiBpZD0iY29udGFpbmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBp
ZD0iZmlyc3RDaGlsZCI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIgaWQ9InNl
Y29uZENoaWxkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisgIDxwcmUgaWQ9ImNvbnNv
bGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188637</attachid>
            <date>2013-02-15 13:40:46 -0800</date>
            <delta_ts>2013-02-19 12:10:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130215163712.patch</filename>
            <type>text/plain</type>
            <size>48039</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTBhZTRkNjk2MjNjNDY2
NDc1YzliMmVjMmJkMTQzZTFiMjQ3NzliNS4uMDNmZTE4OGRhZjY1NmY1MDhmYjVlOGZmYzk5NDk1
N2JkZTM5Y2Y1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTE1ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIHNob3VsZCBiZSBtb3Jl
IGludHVpdGl2ZSBhbmQgbW9yZQorICAgICAgICByb2J1c3QgdGhhbiB0aGUgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKworICAgICAgICBUZXN0OiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50
by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWwKKyAgICAgICAg
VGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3Np
dGVkLXNjcm9sbGluZy5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzUG9zaXRpb25lZENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRh
aW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250
YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUlzTm9ybWFsRmxv
d09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJMaXN0c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVT
dGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aDoKKyAgICAgICAgKFJlbmRlckxheWVyKToKKwogMjAxMy0wMi0xNSAgQW5kcmVhcyBLbGluZyAg
PGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRWxlbWVudERhdGE6IE1vdmUgbGVhZnkgdGhp
bmdzIG91dCBvZiB0aGUgYmFzZSBjbGFzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCmluZGV4IDQwOGJkYjliNWU1OTNmZjQ4ODYzOTU2MDQ4NDczMTlkM2FkZDAzNzcu
LjBmZmU4ZjcwYmVjNjc2NDEyMTdlMjY1OWYyMjgyYzgyZmJlN2ZiNDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFJlbmRlckxh
eWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZW5kZXJlcikKICAgICAs
IG1faGFzT3V0T2ZGbG93UG9zaXRpb25lZERlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc091
dE9mRmxvd1Bvc2l0aW9uZWREZXNjZW5kYW50RGlydHkodHJ1ZSkKICAgICAsIG1fbmVlZHNDb21w
b3NpdGVkU2Nyb2xsaW5nKGZhbHNlKQotICAgICwgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJ
blN0YWNraW5nT3JkZXIoZmFsc2UpCisgICAgLCBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nY29u
dGFpbmVyKGZhbHNlKQogICAgICwgbV9pc1Jvb3RMYXllcihyZW5kZXJlci0+aXNSZW5kZXJWaWV3
KCkpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5z
aWRlUmVmbGVjdGlvbihmYWxzZSkKQEAgLTUyMiwxNjMgKzUyMiwxODMgQEAgYm9vbCBSZW5kZXJM
YXllcjo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpIGNv
bnN0CiAgICAgICAgICYmIHJlbmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpOwogfQogCi0v
LyBJZiB3ZSBhcmUgYSBzdGFja2luZyBjb250YWluZXIsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxs
IGRldGVybWluZSBpZiBvdXIKLS8vIGRlc2NlbmRhbnRzIGZvciBhIGNvbnRpZ3VvdXMgYmxvY2sg
aW4gc3RhY2tpbmcgb3JkZXIuIFRoaXMgaXMgcmVxdWlyZWQgaW4KLS8vIG9yZGVyIGZvciBhbiBl
bGVtZW50IHRvIGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gSXQg
aXMgc2FmZQotLy8gdG8gYmVjb21lIGEgc3RhY2tpbmcgY29udGFpbmVyIGlmIHRoaXMgY2hhbmdl
IHdvdWxkIG5vdCBhbHRlciB0aGUgc3RhY2tpbmcKLS8vIG9yZGVyIG9mIGxheWVycyBvbiB0aGUg
cGFnZS4gVGhhdCBjYW4gb25seSBoYXBwZW4gaWYgYSBub24tZGVzY2VuZGFudCBhcHBlYXIKLS8v
IGJldHdlZW4gdXMgYW5kIG91ciBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4gSGVyZSdz
IGFuIGV4YW1wbGU6Ci0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgfCAgXC4KLS8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEEgICBCICAgQwotLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvXCAgIHwgICAvXC4KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC04
ICBEICAyICA3Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLS8vCi0vLyBJJ3ZlIGxhYmVsZWQgb3Vy
IG5vcm1hbCBmbG93IGRlc2NlbmRhbnRzIEEsIEIsIEMsIGFuZCBELCBvdXIgc3RhY2tpbmcKLS8v
IGNvbnRhaW5lciBkZXNjZW5kYW50cyB3aXRoIHRoZWlyIHogaW5kaWNlcywgYW5kIHVzIHdpdGgg
J3RoaXMnICh3ZSdyZSBhCi0vLyBzdGFja2luZyBjb250YWluZXIgYW5kIG91ciB6SW5kZXggZG9l
c24ndCBtYXR0ZXIgaGVyZSkuIFRoZXNlIG5vZGVzIGFwcGVhciBpbgotLy8gdGhyZWUgbGlzdHM6
IHBvc1pPcmRlciwgbmVnWk9yZGVyLCBhbmQgbm9ybWFsIGZsb3cgKGtlZXAgaW4gbWluZCB0aGF0
IG5vcm1hbAotLy8gZmxvdyBsYXllcnMgZG9uJ3Qgb3ZlcmxhcCkuIFNvIGlmIHdlIGFycmFuZ2Ug
dGhlc2UgbGlzdHMgaW4gb3JkZXIgd2UgZ2V0IG91cgotLy8gc3RhY2tpbmcgb3JkZXI6Ci0vLwot
Ly8gICAgICAgICAgICAgICAgICAgICBbLThdLCBbQS1EXSwgWzAsIDIsIDUsIDddLS0+IHBvcyB6
LW9yZGVyLgotLy8gICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwKLS8vICAgICAgICBOZWcg
ei1vcmRlci4gPC0rICAgICArLS0+IE5vcm1hbCBmbG93IGRlc2NlbmRhbnRzLgotLy8KLS8vIFdl
IGNhbiB0aGVuIGFzc2lnbiBuZXcsICdzdGFja2luZycgb3JkZXIgaW5kaWNlcyB0byB0aGVzZSBl
bGVtZW50cyBhcyBmb2xsb3dzOgotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgWy04XSwgW0Et
RF0sIFswLCAyLCA1LCA3XQotLy8gJ1N0YWNraW5nJyBpbmRpY2VzOiAgLTEgICAgIDAgICAgIDEg
IDIgIDMgIDQKLS8vCi0vLyBOb3RlIHRoYXQgdGhlIG5vcm1hbCBmbG93IGRlc2NlbmRhbnRzIGNh
biBzaGFyZSBhbiBpbmRleCBiZWNhdXNlIHRoZXkgZG9uJ3QKLS8vIHN0YWNrL292ZXJsYXAuIE5v
dyBvdXIgcHJvYmxlbSBiZWNvbWVzIHZlcnkgc2ltcGxlOiBhIGxheWVyIGNhbiBzYWZlbHkgYmVj
b21lCi0vLyBhIHN0YWNraW5nIGNvbnRhaW5lciBpZiB0aGUgc3RhY2tpbmctb3JkZXIgaW5kaWNl
cyBvZiBpdCBhbmQgaXRzIGRlc2NlbmRhbnRzCi0vLyBhcHBlYXIgaW4gYSBjb250aWd1b3VzIGJs
b2NrIGluIHRoZSBsaXN0IG9mIHN0YWNraW5nIGluZGljZXMuIFRoaXMgcHJvYmxlbQotLy8gY2Fu
IGJlIHNvbHZlZCB2ZXJ5IGVmZmljaWVudGx5IGJ5IGNhbGN1bGF0aW5nIHRoZSBtaW4vbWF4IHN0
YWNraW5nIGluZGljZXMgaW4KLS8vIHRoZSBzdWJ0cmVlLCBhbmQgdGhlIG51bWJlciBzdGFja2lu
ZyBjb250YWluZXIgZGVzY2VuZGFudHMuIE9uY2Ugd2UgaGF2ZSB0aGlzCi0vLyBpbmZvcm1hdGlv
biwgd2Uga25vdyB0aGF0IHRoZSBzdWJ0cmVlJ3MgaW5kaWNlcyBmb3JtIGEgY29udGlndW91cyBi
bG9jayBpZjoKLS8vCi0vLyAgICAgICAgICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXgg
PT0gbnVtU0NEZXNjZW5kYW50cwotLy8KLS8vIFNvIGZvciBub2RlIEEgaW4gdGhlIGV4YW1wbGUg
YWJvdmUgd2Ugd291bGQgaGF2ZToKLS8vICAgbWF4U3RhY2tJbmRleCA9IDEKLS8vICAgbWluU3Rh
Y2tJbmRleCA9IC0xCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9IDIKLS8vCi0vLyBhbmQgc28sCi0v
LyAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rlc2NlbmRhbnRz
Ci0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAxIC0gKC0xKSA9PSAyCi0vLyAgPT09PiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9PSAyCi0vLwotLy8gIFNpbmNlIHRoaXMgaXMg
dHJ1ZSwgQSBjYW4gc2FmZWx5IGJlY29tZSBhIHN0YWNraW5nIGNvbnRhaW5lci4KLS8vICBOb3cs
IGZvciBub2RlIEMgd2UgaGF2ZToKLS8vCi0vLyAgIG1heFN0YWNrSW5kZXggPSA0Ci0vLyAgIG1p
blN0YWNrSW5kZXggPSAwIDwtLSBiZWNhdXNlIEMgaGFzIHN0YWNraW5nIGluZGV4IDAuCi0vLyAg
IG51bVNDRGVjZW5kYW50cyA9IDIKLS8vCi0vLyBhbmQgc28sCi0vLyAgICAgICBtYXhTdGFja0lu
ZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rlc2NlbmRhbnRzCi0vLyAgPT09PiAgICAgICAg
ICAgICAgICAgICAgICAgICA0IC0gMCA9PSAyCi0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNCA9PSAyCi0vLwotLy8gU2luY2UgdGhpcyBpcyBmYWxzZSwgQyBjYW5ub3QgYmUg
c2FmZWx5IHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVyLiBUaGlzCi0vLyBoYXBwZW5l
ZCBiZWNhdXNlIG9mIHRoZSBlbGVtZW50cyB3aXRoIHotaW5kZXggNSBhbmQgMC4gTm93IGlmIDUg
aGFkIGJlZW4gYQotLy8gY2hpbGQgb2YgQyByYXRoZXIgdGhhbiBELCBhbmQgQSBoYWQgbm8gY2hp
bGQgd2l0aCBaIGluZGV4IDAsIHdlIHdvdWxkIGhhdmUgaGFkOgotLy8KLS8vICAgbWF4U3RhY2tJ
bmRleCA9IDMKLS8vICAgbWluU3RhY2tJbmRleCA9IDAgPC0tIGJlY2F1c2UgQyBoYXMgc3RhY2tp
bmcgaW5kZXggMC4KLS8vICAgbnVtU0NEZWNlbmRhbnRzID0gMwotLy8KLS8vIGFuZCBzbywKLS8v
ICAgICAgIG1heFN0YWNrSW5kZXggLSBtaW5TdGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMK
LS8vICA9PT0+ICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAwID09IDMKLS8vICA9PT0+ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAzID09IDMKLS8vCi0vLyAgQW5kIHdlIHdvdWxkIGNv
bmNsdWRlIHRoYXQgQyBjb3VsZCBiZSBwcm9tb3RlZC4KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcigpCi17Ci0gICAgaWYgKCFp
c1N0YWNraW5nQ29udGV4dCgpIHx8ICFhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dT
Y3JvbGxFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9ub3JtYWxG
bG93TGlzdERpcnR5KTsKLSAgICBBU1NFUlQoIW1fek9yZGVyTGlzdHNEaXJ0eSk7CitzdGF0aWMg
aW5saW5lIGJvb2wgaXNQb3NpdGlvbmVkQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
cikKK3sKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBsYXllclJlbmRlcmVyID0gbGF5ZXIt
PnJlbmRlcmVyKCk7CisgICAgcmV0dXJuIGxheWVyLT5pc1Jvb3RMYXllcigpIHx8IGxheWVyUmVu
ZGVyZXItPmlzUG9zaXRpb25lZCgpIHx8IGxheWVyLT5oYXNUcmFuc2Zvcm0oKTsKK30KIAotICAg
IE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IHBvc1pPcmRlckxpc3Q7Ci0gICAgT3duUHRy
PFZlY3RvcjxSZW5kZXJMYXllcio+ID4gbmVnWk9yZGVyTGlzdDsKLSAgICByZWJ1aWxkWk9yZGVy
TGlzdHMoU3RvcEF0U3RhY2tpbmdDb250ZXh0cywgcG9zWk9yZGVyTGlzdCwgbmVnWk9yZGVyTGlz
dCk7CisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIg
dG8gc2ltcGxpZnkgaW5kZXhpbmcgaW50bworLy8gdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB6
LW9yZGVyIGxpc3RzLCB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZW0gYm90aAorLy8gZnJvbSBs
ZWZ0LXRvLXJpZ2h0IGFuZCByaWdodC10by1sZWZ0Lgorc3RhdGljIGNvbnN0IFJlbmRlckxheWVy
KiBnZXRTdGFja2luZ09yZGVyRWxlbWVudEF0KGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiBw
b3NaT3JkZXJMaXN0LCBjb25zdCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCwg
Y29uc3QgYm9vbCBmcm9tTGVmdCwgY29uc3Qgc2l6ZV90IGluZGV4KQoreworICAgIHNpemVfdCBu
ZWdaT3JkZXJMaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QgPyBuZWdaT3JkZXJMaXN0LT5zaXplKCkg
OiAwOwogCi0gICAgLy8gQ3JlYXRlIGEgcmV2ZXJzZSBsb29rdXAuCi0gICAgSGFzaE1hcDxjb25z
dCBSZW5kZXJMYXllciosIGludD4gbG9va3VwOworICAgIGlmIChmcm9tTGVmdCkgeworICAgICAg
ICBpZiAoaW5kZXggPCBuZWdaT3JkZXJMaXN0U2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBuZWda
T3JkZXJMaXN0LT5hdChpbmRleCk7CiAKLSAgICBpZiAobmVnWk9yZGVyTGlzdCkgewotICAgICAg
ICBpbnQgc3RhY2tpbmdPcmRlckluZGV4ID0gLTE7Ci0gICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9
IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogY3VycmVudExheWVyID0g
bmVnWk9yZGVyTGlzdC0+YXQobGlzdFNpemUgLSBpIC0gMSk7Ci0gICAgICAgICAgICBpZiAoIWN1
cnJlbnRMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGxvb2t1cC5zZXQoY3VycmVudExheWVyLCBzdGFja2luZ09yZGVySW5k
ZXgtLSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc1pPcmRlckxpc3QtPmF0KGluZGV4
IC0gbmVnWk9yZGVyTGlzdFNpemUpOwogICAgIH0KIAotICAgIGlmIChwb3NaT3JkZXJMaXN0KSB7
Ci0gICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKLSAgICAg
ICAgaW50IHN0YWNraW5nT3JkZXJJbmRleCA9IDE7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1cnJlbnRM
YXllciA9IHBvc1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50TGF5
ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBsb29rdXAuc2V0KGN1cnJlbnRMYXllciwgc3RhY2tpbmdPcmRlckluZGV4KyspOwot
ICAgICAgICB9Ci0gICAgfQorICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZSA9IHBvc1pPcmRl
ckxpc3QgPyBwb3NaT3JkZXJMaXN0LT5zaXplKCkgOiAwOwogCi0gICAgaW50IG1pbkluZGV4ID0g
MDsKLSAgICBpbnQgbWF4SW5kZXggPSAwOwotICAgIGludCBjb3VudCA9IDA7Ci0gICAgYm9vbCBm
aXJzdEl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3Vz
SW5TdGFja2luZ09yZGVyUmVjdXJzaXZlKGxvb2t1cCwgbWluSW5kZXgsIG1heEluZGV4LCBjb3Vu
dCwgZmlyc3RJdGVyYXRpb24pOworICAgIGlmIChpbmRleCA8IHBvc1pPcmRlckxpc3RTaXplKQor
ICAgICAgICByZXR1cm4gcG9zWk9yZGVyTGlzdC0+YXQocG9zWk9yZGVyTGlzdFNpemUgLSBpbmRl
eCAtIDEpOworCisgICAgcmV0dXJuIG5lZ1pPcmRlckxpc3QtPmF0KG5lZ1pPcmRlckxpc3RTaXpl
IC0gKHBvc1pPcmRlckxpc3RTaXplIC0gaW5kZXgpIC0gMSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2
ZShjb25zdCBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgaW50PiYgbG9va3VwLCBpbnQmIG1p
bkluZGV4LCBpbnQmIG1heEluZGV4LCBpbnQmIGNvdW50LCBib29sIGZpcnN0SXRlcmF0aW9uKQor
Ly8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRv
IGEgc3RhY2tpbmcgY29udGFpbmVyLAorLy8gZ2l2ZW4gaXRzIGNsb3Nlc3Qgc3RhY2tpbmcgY29u
dGV4dCBhbmNlc3Rvci4gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgd2hhdAorLy8gcG9zaXRpdmUg
YW5kIG5lZ2F0aXZlIHotb3JkZXIgbGlzdHMgd291bGQgbG9vayBsaWtlIGJlZm9yZSBhbmQgYWZ0
ZXIKKy8vIHByb21vdGlvbiwgYW5kIGVuc3VyaW5nIHRoYXQgcHJvcGVyIHN0YWNraW5nIG9yZGVy
IGlzIHByZXNlcnZlZCBiZXR3ZWVuIHRoZQorLy8gdHdvIHNldHMgb2YgbGlzdHMuCit2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKFJlbmRlckxheWVyKiBhbmNl
c3RvclN0YWNraW5nQ29udGV4dCkKIHsKLSAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQoKSAmJiAh
Zmlyc3RJdGVyYXRpb24pIHsKLSAgICAgICAgaWYgKGxvb2t1cC5jb250YWlucyh0aGlzKSkgewot
ICAgICAgICAgICAgbWluSW5kZXggPSBzdGQ6Om1pbihtaW5JbmRleCwgbG9va3VwLmdldCh0aGlz
KSk7Ci0gICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBsb29rdXAuZ2V0
KHRoaXMpKTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KKyAgICBpZiAoaXNTdGFj
a2luZ0NvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgLy8gVE9ETyAoaGFydG1hbm5n
QGNocm9taXVtLm9yZyk6IFdlIGNhbiBlYXJseS1vdXQgb2YgdGhpcyBmdW5jdGlvbiBtb3JlCisg
ICAgLy8gb2Z0ZW4gaWYgd2UgbWFpbnRhaW4gYSBkaXJ0eSBiaXQgZm9yIHRoZQorICAgIC8vIG1f
Y2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWluZXIgcHJvcGVydHkKKyAgICAvLyAoaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTk2NikKKworICAgIHVwZGF0ZU5v
cm1hbEZsb3dMaXN0KCk7CisKKyAgICBBU1NFUlQoIW1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7CisK
KyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0QmVmb3JlUHJv
bW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBuZWdaT3JkZXJMaXN0QmVm
b3JlUHJvbW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJM
aXN0QWZ0ZXJQcm9tb3RlOworICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pP
cmRlckxpc3RBZnRlclByb21vdGU7CisKKyAgICAvLyBXZSBjYW4ndCB1c2UgVGVtcG9yYXJ5Q2hh
bmdlPD4gaGVyZSBzaW5jZSBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyBhbmQKKyAgICAvLyBt
X2lzTm9ybWFsRmxvd09ubHkgYXJlIGJvdGggYml0ZmllbGRzLCBzbyB3ZSBoYXZlIHRvIGRvIGl0
IHRoZQorICAgIC8vIG9sZC1mYXNoaW9uZWQgd2F5LgorICAgIGJvb2wgb2xkTmVlZHNDb21wb3Np
dGVkU2Nyb2xsaW5nID0gbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmc7CisgICAgYm9vbCBvbGRJ
c05vcm1hbEZsb3dPbmx5ID0gbV9pc05vcm1hbEZsb3dPbmx5OworCisgICAgLy8gU2V0IHRoZSBm
bGFnIG9uIHRoZSBjdXJyZW50IGxheWVyLCB0aGVuIHJlYnVpbGQgYW5jZXN0b3Igc3RhY2tpbmcK
KyAgICAvLyBjb250ZXh0J3MgbGlzdHMuIFRoaXMgd2F5LCB3ZSBjYW4gc2VlIHRoZSBleGFjdCBl
ZmZlY3RzIHRoYXQgcHJvbW90aW5nCisgICAgLy8gdGhpcyBsYXllciB3b3VsZCBjYXVzZS4KKyAg
ICBtX2lzTm9ybWFsRmxvd09ubHkgPSB0cnVlOworICAgIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xs
aW5nID0gZmFsc2U7CisgICAgYW5jZXN0b3JTdGFja2luZ0NvbnRleHQtPnJlYnVpbGRaT3JkZXJM
aXN0cyhTdG9wQXRTdGFja2luZ0NvbnRhaW5lcnMsIHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3Rl
LCBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSk7CisKKyAgICBtX2lzTm9ybWFsRmxvd09ubHkg
PSBmYWxzZTsKKyAgICBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IHRydWU7CisgICAgYW5j
ZXN0b3JTdGFja2luZ0NvbnRleHQtPnJlYnVpbGRaT3JkZXJMaXN0cyhTdG9wQXRTdGFja2luZ0Nv
bnRhaW5lcnMsIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUsIG5lZ1pPcmRlckxpc3RBZnRlclBy
b21vdGUpOworCisgICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBvbGROZWVkc0NvbXBv
c2l0ZWRTY3JvbGxpbmc7CisgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gb2xkSXNOb3JtYWxGbG93
T25seTsKKworICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBwb3Na
T3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA/IHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXpl
KCkgOiAwOworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBuZWda
T3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA/IG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXpl
KCkgOiAwOworICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IHBvc1pP
cmRlckxpc3RBZnRlclByb21vdGUgPyBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkg
OiAwOworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IG5lZ1pPcmRl
ckxpc3RBZnRlclByb21vdGUgPyBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAw
OworCisgICAgYm9vbCBoYXNCYWNrZ3JvdW5kID0gcmVuZGVyZXIoKS0+aGFzQmFja2dyb3VuZCgp
OworICAgIGJvb2wgd2VBcmVQb3NpdGlvbmVkID0gcmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCk7
CisKKyAgICBjb25zdCBSZW5kZXJMYXllciogcG9zaXRpb25lZEFuY2VzdG9yID0gcGFyZW50KCk7
CisgICAgd2hpbGUgKHBvc2l0aW9uZWRBbmNlc3RvciAmJiAhaXNQb3NpdGlvbmVkQ29udGFpbmVy
KHBvc2l0aW9uZWRBbmNlc3RvcikgJiYgIXBvc2l0aW9uZWRBbmNlc3Rvci0+aXNTdGFja2luZ0Nv
bnRleHQoKSkKKyAgICAgICAgcG9zaXRpb25lZEFuY2VzdG9yID0gcG9zaXRpb25lZEFuY2VzdG9y
LT5wYXJlbnQoKTsKKyAgICBpZiAocG9zaXRpb25lZEFuY2VzdG9yICYmICghaXNQb3NpdGlvbmVk
Q29udGFpbmVyKHBvc2l0aW9uZWRBbmNlc3RvcikgfHwgcG9zaXRpb25lZEFuY2VzdG9yLT5pc1N0
YWNraW5nQ29udGV4dCgpKSkKKyAgICAgICAgcG9zaXRpb25lZEFuY2VzdG9yID0gMDsKKworICAg
IC8vIEluc2VydCB0aGlzIGludG8gdGhlIHBvc1pPcmRlcmlzdEJlZm9yZVByb21vdGUgZGlyZWN0
bHkgYWZ0ZXIgdGhlCisgICAgLy8gcG9zaXRpb25lZCBhbmNlc3RvciwgaWYgdGhlcmUgaXMgb25l
LiBPdGhlcndpc2UsIGFkZCBpdCB0byB0aGUgdmVyeQorICAgIC8vIGJlZ2lubmluZy4KKyAgICBp
ZiAoIXdlQXJlUG9zaXRpb25lZCkgeworICAgICAgICBpZiAoIXBvc2l0aW9uZWRBbmNlc3Rvcikg
eworICAgICAgICAgICAgaWYgKCFwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSkKKyAgICAgICAg
ICAgICAgICBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
UmVuZGVyTGF5ZXIqPigpKTsKKworICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21v
dGUtPnByZXBlbmQodGhpcyk7CisgICAgICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVBy
b21vdGUrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGU7IGluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICBpZiAocG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPmF0KGluZGV4
KSA9PSBwb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVy
TGlzdEJlZm9yZVByb21vdGUtPmluc2VydChpbmRleCArIDEsIHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUrKzsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CiAgICAgfQogCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGludCBjaGlsZE1p
bkluZGV4ID0gMDsKLSAgICAgICAgaW50IGNoaWxkTWF4SW5kZXggPSAwOwotICAgICAgICBpbnQg
Y2hpbGRDb3VudCA9IDA7Ci0gICAgICAgIGNoaWxkLT51cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRp
Z3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUobG9va3VwLCBjaGlsZE1pbkluZGV4LCBjaGls
ZE1heEluZGV4LCBjaGlsZENvdW50LCBmYWxzZSk7Ci0gICAgICAgIGlmIChjaGlsZENvdW50KSB7
Ci0gICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwotICAgICAgICAgICAgbWluSW5kZXgg
PSBzdGQ6Om1pbihtaW5JbmRleCwgY2hpbGRNaW5JbmRleCk7Ci0gICAgICAgICAgICBtYXhJbmRl
eCA9IHN0ZDo6bWF4KG1heEluZGV4LCBjaGlsZE1heEluZGV4KTsKKyAgICBzaXplX3Qgc2l6ZUJl
Zm9yZVByb21vdGUgPSBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgKyBuZWdaT3JkZXJM
aXN0U2l6ZUJlZm9yZVByb21vdGU7CisgICAgc2l6ZV90IHNpemVBZnRlclByb21vdGUgPSBwb3Na
T3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSArIG5lZ1pPcmRlckxpc3RTaXplQWZ0ZXJQcm9tb3Rl
OworCisgICAgYm9vbCBjYW5Qcm9tb3RlID0gdHJ1ZTsKKworICAgIC8vIFNjYW4gb3ZlciB0aGUg
bGlzdHMgdHdpY2UgLSB0aGUgZmlyc3QgdGltZSBmcm9tIGxlZnQtdG8tcmlnaHQgYW5kIHRoZQor
ICAgIC8vIHNlY29uZCBmcm9tIHJpZ2h0LXRvLWxlZnQgLSBlYWNoIHRpbWUgc3RvcHBpbmcgd2hl
biB3ZSBoaXQgdGhpcyBpbgorICAgIC8vIHRoZSBhZnRlci1wcm9tb3RlIGxpc3QuIFdlIGNoZWNr
IGFsb25nIHRoZSB3YXkgZm9yIGFueSBpbmNvbnNpc3RlbmNpZXMKKyAgICAvLyBiZXR3ZWVuIHRo
ZSB0d28gbGlzdHMgdGhhdCBjb3VsZCBjYXVzZSBhIGNoYW5nZSBpbiBwYWludCBvcmRlciBpZiB3
ZQorICAgIC8vIHByb21vdGUuCisgICAgZm9yIChpbnQgcGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNz
KyspIHsKKyAgICAgICAgYm9vbCBmcm9tTGVmdCA9IHBhc3M7CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IHNpemVCZWZvcmVQcm9tb3RlICYmIGluZGV4IDwgc2l6ZUFm
dGVyUHJvbW90ZTsgaW5kZXgrKykgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxh
eWVyQmVmb3JlUHJvbW90ZSA9IGdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQocG9zWk9yZGVyTGlz
dEJlZm9yZVByb21vdGUuZ2V0KCksIG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLmdldCgpLCBm
cm9tTGVmdCwgaW5kZXgpOworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyQWZ0
ZXJQcm9tb3RlID0gZ2V0U3RhY2tpbmdPcmRlckVsZW1lbnRBdChwb3NaT3JkZXJMaXN0QWZ0ZXJQ
cm9tb3RlLmdldCgpLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLmdldCgpLCBmcm9tTGVmdCwg
aW5kZXgpOworCisgICAgICAgICAgICBpZiAobGF5ZXJCZWZvcmVQcm9tb3RlICE9IGxheWVyQWZ0
ZXJQcm9tb3RlKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBhIG1pc21hdGNoLCB0
aGUgb25seSBzaXR1YXRpb24gd2hlcmUgd2UgaGF2ZW4ndAorICAgICAgICAgICAgICAgIC8vIG5l
Y2Vzc2FyaWx5IGNoYW5nZWQgcGFpbnQgb3JkZXIgeWV0IGlzIGlmIGxheWVyQWZ0ZXJQcm9tb3Rl
CisgICAgICAgICAgICAgICAgLy8gaXMgdGhpcy4KKyAgICAgICAgICAgICAgICBpZiAobGF5ZXJB
ZnRlclByb21vdGUgIT0gdGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYW5Qcm9tb3RlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIEFsc28sIGlmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIGJhY2tn
cm91bmQsIHRoZW4gYW55CisgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgei1vcmRlciBjaGls
ZHJlbiB3aWxsIGdldCBiZXR3ZWVuIHRoZSBiYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgLy8g
YW5kIHRoZSByZXN0IG9mIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICBpZiAocGFzcyAmJiBo
YXNCYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGNhblByb21vdGUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobGF5ZXJBZnRlclByb21vdGUgPT0gdGhpcykKKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGlmICghY2FuUHJvbW90ZSkK
KyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmICghaXNTdGFja2luZ0NvbnRleHQo
KSkgewotICAgICAgICBib29sIG5ld1ZhbHVlID0gbWF4SW5kZXggLSBtaW5JbmRleCA9PSBjb3Vu
dDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGJvb2wgZGlkVXBk
YXRlID0gbmV3VmFsdWUgIT0gbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3Jk
ZXI7CisgICAgYm9vbCBkaWRVcGRhdGUgPSAoY2FuUHJvbW90ZSAhPSBtX2NhbkJlUHJvbW90ZWRU
b1N0YWNraW5nY29udGFpbmVyKTsKICNlbmRpZgotICAgICAgICBtX2Rlc2NlbmRhbnRzQXJlQ29u
dGlndW91c0luU3RhY2tpbmdPcmRlciA9IG5ld1ZhbHVlOworCisgICAgbV9jYW5CZVByb21vdGVk
VG9TdGFja2luZ2NvbnRhaW5lciA9IGNhblByb21vdGU7CisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgICAgIGlmIChkaWRVcGRhdGUpCi0gICAgICAgICAgICB1cGRhdGVO
ZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBpZiAoZGlkVXBkYXRlKQorICAgICAgICB1
cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKICNlbmRpZgotICAgIH0KIH0KIAorLy8g
Y2FsbCB1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyIGZvciBhbGwgZGVzY2VuZGFudHMgb2YK
Ky8vIHN0YWNraW5nIGNvbnRleHQgImFuY2VzdG9yU3RhY2tpbmdDb250ZXh0Igordm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlQ2FuQ2hpbGRyZW5CZVN0YWNraW5nQ29udGFpbmVycyhSZW5kZXJMYXll
ciogYW5jZXN0b3JTdGFja2luZ0NvbnRleHQsIGJvb2wgZmlyc3RQYXNzKQoreworICAgIGlmIChp
c1N0YWNraW5nQ29udGV4dCgpICYmICFmaXJzdFBhc3MpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghZmlyc3RQYXNzKQorICAgICAgICB1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKGFu
Y2VzdG9yU3RhY2tpbmdDb250ZXh0KTsKKworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgY2hpbGQtPnVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRhaW5lcnMoYW5jZXN0b3JT
dGFja2luZ0NvbnRleHQsIGZhbHNlKTsKK30KKworCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRl
UmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkKIHsKICAgICBBU1NFUlQo
IW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSk7CkBAIC05MzcsNyArOTU3LDcgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6Y2FuQmVTdGFja2luZ0NvbnRhaW5lcigpIGNvbnN0CiAgICAgaWYgKGlzU3Rh
Y2tpbmdDb250ZXh0KCkgfHwgIXN0YWNraW5nQ29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgcmV0dXJuIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09y
ZGVyOworICAgIHJldHVybiBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nY29udGFpbmVyOwogfQog
CiB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWaXNpYmxlQ29udGVudCgpCkBAIC0xMjU0LDEyICsx
Mjc0LDYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpzdGFja2luZ0NvbnRhaW5lcigpIGNv
bnN0CiAgICAgcmV0dXJuIGxheWVyOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb3NpdGlv
bmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKLXsKLSAgICBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiBsYXllclJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIGxh
eWVyLT5pc1Jvb3RMYXllcigpIHx8IGxheWVyUmVuZGVyZXItPmlzUG9zaXRpb25lZCgpIHx8IGxh
eWVyLT5oYXNUcmFuc2Zvcm0oKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGlzRml4ZWRQb3Np
dGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIt
PmlzUm9vdExheWVyKCkgfHwgbGF5ZXItPmhhc1RyYW5zZm9ybSgpOwpAQCAtMTg5NSw2ICsxOTA5
LDE5IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Om5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0
CiAgICAgcmV0dXJuIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOwogfQogCit2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVJc05vcm1hbEZsb3dPbmx5KCkKK3sKKyAgICBib29sIGlzTm9ybWFsRmxv
d09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7CisgICAgaWYgKGlzTm9ybWFsRmxvd09u
bHkgIT0gbV9pc05vcm1hbEZsb3dPbmx5KSB7CisgICAgICAgIG1faXNOb3JtYWxGbG93T25seSA9
IGlzTm9ybWFsRmxvd09ubHk7CisgICAgICAgIFJlbmRlckxheWVyKiBwID0gcGFyZW50KCk7Cisg
ICAgICAgIGlmIChwKQorICAgICAgICAgICAgcC0+ZGlydHlOb3JtYWxGbG93TGlzdCgpOworICAg
ICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMoKTsKKyAgICB9Cit9CisKKwog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKIHsKICAg
ICBib29sIG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IG1fbmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nOwpAQCAtMTkyMiw2ICsxOTQ5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTmVl
ZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKICAgICAgICAgICAgIGNsZWFyWk9yZGVyTGlzdHMoKTsK
IAogICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMoKTsKKyAgICAgICAg
dXBkYXRlSXNOb3JtYWxGbG93T25seSgpOwogCiAgICAgICAgIGNvbXBvc2l0b3IoKS0+c2V0U2hv
dWxkUmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQoKTsKICAgICAgICAgY29tcG9zaXRv
cigpLT5zZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKCk7CkBAIC01MjY3LDcgKzUyOTUs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxh
eWVycywgQ29sbGVjdExheWVyc0JlaGF2aW9yCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyTGlzdHNJZk5lZWRlZCgpCiB7Ci0gICAgYm9vbCBzaG91bGRVcGRhdGVEZXNjZW5kYW50c0Fy
ZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIgPSBpc1N0YWNraW5nQ29udGV4dCgpICYmIChtX3pP
cmRlckxpc3RzRGlydHkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5KTsKKyAgICBib29sIHNob3Vs
ZFVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIgPSBpc1N0YWNraW5nQ29udGV4dCgpICYmICht
X3pPcmRlckxpc3RzRGlydHkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5KTsKICAgICB1cGRhdGVa
T3JkZXJMaXN0cygpOwogICAgIHVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CiAKQEAgLTUyNzYsOCAr
NTMwNCwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKQog
ICAgICAgICByZWZsZWN0aW9uTGF5ZXItPnVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CiAgICAgfQog
Ci0gICAgaWYgKHNob3VsZFVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdP
cmRlcikgewotICAgICAgICB1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5n
T3JkZXIoKTsKKyAgICBpZiAoc2hvdWxkVXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcikgewor
ICAgICAgICAvLyBjYWxsIFVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIgZm9yIGFsbCBkZXNj
ZW5kYW50cywKKyAgICAgICAgLy8gcGFzc2luZyBzZWxmIGluIGFzIGFuY2VzdG9yIHN0YWNraW5n
IGNvbnRleHQuCisgICAgICAgIHVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRhaW5lcnMo
dGhpcywgdHJ1ZSk7CisKICAgICAgICAgLy8gVGhlIGFib3ZlIGZ1bmN0aW9uIGNhbiBjYXVzZSB1
cyB0byB1cGRhdGUgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcKICAgICAgICAgLy8gYW5kIGRp
cnR5IG91ciBsYXllciBsaXN0cy4gUmVmcmVzaCB0aGVtIGlmIG5lY2Vzc2FyeS4KICAgICAgICAg
dXBkYXRlWk9yZGVyTGlzdHMoKTsKQEAgLTU0NjQsNyArNTQ5NSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVN0YWNraW5nQ29udGV4dHNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTCiAgICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dCA9IHRoaXMtPmlzU3RhY2tpbmdD
b250ZXh0KCk7CiAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0ICE9IHdhc1N0YWNraW5nQ29udGV4
dCkgewogICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMoKTsKLSAgICAg
ICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KQorICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQg
fHwgaXNTdGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0cygp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjbGVhclpPcmRlckxpc3RzKCk7CkBAIC01NDc1
LDcgKzU1MDYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0
ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkUwogICAgIC8vIGxpa2VseSBiZSBm
b2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4KICAgICBpZiAob2xkU3R5bGUtPnpJbmRleCgpICE9
IHJlbmRlcmVyKCktPnN0eWxlKCktPnpJbmRleCgpIHx8IG9sZFN0eWxlLT52aXNpYmlsaXR5KCkg
IT0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpKSB7CiAgICAgICAgIGRpcnR5U3Rh
Y2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygpOwotICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRl
eHQpCisgICAgICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCB8fCBpc1N0YWNraW5nQ29udGFpbmVy
KCkpCiAgICAgICAgICAgICBkaXJ0eVpPcmRlckxpc3RzKCk7CiAgICAgfQogfQpAQCAtNTU2NCwx
NCArNTU5NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU91dE9mRmxvd1Bvc2l0aW9uZWQo
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7Ci0g
ICAgYm9vbCBpc05vcm1hbEZsb3dPbmx5ID0gc2hvdWxkQmVOb3JtYWxGbG93T25seSgpOwotICAg
IGlmIChpc05vcm1hbEZsb3dPbmx5ICE9IG1faXNOb3JtYWxGbG93T25seSkgewotICAgICAgICBt
X2lzTm9ybWFsRmxvd09ubHkgPSBpc05vcm1hbEZsb3dPbmx5OwotICAgICAgICBSZW5kZXJMYXll
ciogcCA9IHBhcmVudCgpOwotICAgICAgICBpZiAocCkKLSAgICAgICAgICAgIHAtPmRpcnR5Tm9y
bWFsRmxvd0xpc3QoKTsKLSAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3Rz
KCk7Ci0gICAgfQorICAgIHVwZGF0ZUlzTm9ybWFsRmxvd09ubHkoKTsKIAogICAgIGlmIChyZW5k
ZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPTUFSUVVFRSAmJiByZW5kZXJlcigpLT5z
dHlsZSgpLT5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNTk9ORSAmJiByZW5kZXJlcigpLT5pc0JveCgp
KSB7CiAgICAgICAgIGlmICghbV9tYXJxdWVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAppbmRleCAzZjYwMzVkNGFhOWY2ZjhjZjc4ZWMyNDZiN2YwMmRhMmIwNTExMDliLi43
NTNlM2NjNmE1NWZhMTEyMDFkOGU4YWNmZmMxNmIyNWVmNTU5MTE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNzk2LDggKzc5NiwxMCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGlydHlBbmNlc3RvckNoYWluSGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50U3Rh
dHVzKCk7CiAKICAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9s
bEVuYWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91
c0luU3RhY2tpbmdPcmRlcigpOwotICAgIHZvaWQgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1
b3VzSW5TdGFja2luZ09yZGVyUmVjdXJzaXZlKGNvbnN0IEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5
ZXIqLCBpbnQ+JiwgaW50JiBtaW5JbmRleCwgaW50JiBtYXhJbmRleCwgaW50JiBjb3VudCwgYm9v
bCBmaXJzdEl0ZXJhdGlvbik7CisKKyAgICBib29sIGlzUHJvbW90ZWRMYXllckxpc3RJbkNvcnJl
Y3RTdGFja2luZ09yZGVyKGNvbnN0IFZlY3Rvcjxjb25zdCBSZW5kZXJMYXllcio+JiwgY29uc3Qg
VmVjdG9yPGNvbnN0IFJlbmRlckxheWVyKj4mKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUNhbkJl
U3RhY2tpbmdDb250YWluZXIoUmVuZGVyTGF5ZXIqKTsKKyAgICB2b2lkIHVwZGF0ZUNhbkNoaWxk
cmVuQmVTdGFja2luZ0NvbnRhaW5lcnMoUmVuZGVyTGF5ZXIqLCBib29sKTsKIAogICAgIHZvaWQg
Y29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCogPSAwKTsKICAgICB2b2lkIGNvbXB1
dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwpAQCAtODE5LDYgKzgyMSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNPdXRPZkZsb3dQb3NpdGlv
bmVkRGVzY2VuZGFudFN0YXR1cygpOwogICAgIHZvaWQgdXBkYXRlT3V0T2ZGbG93UG9zaXRpb25l
ZChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCisgICAgdm9pZCB1cGRhdGVJc05vcm1h
bEZsb3dPbmx5KCk7CiAgICAgdm9pZCB1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY2hhbmdlZC4KQEAgLTEwNjcs
NyArMTA3MCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBJZiB0aGlzIGlzIHRydWUsIHRoZW4gbm8g
bm9uLWRlc2NlbmRhbnQgYXBwZWFycyBiZXR3ZWVuIGFueSBvZiBvdXIKICAgICAvLyBkZXNjZW5k
YW50cyBpbiBzdGFja2luZyBvcmRlci4gVGhpcyBpcyBvbmUgb2YgdGhlIHJlcXVpcmVtZW50cyBv
ZiBiZWluZwogICAgIC8vIGFibGUgdG8gc2FmZWx5IGJlY29tZSBhIHN0YWNraW5nIGNvbnRleHQu
Ci0gICAgYm9vbCBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlciA6IDE7
CisgICAgYm9vbCBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nY29udGFpbmVyIDogMTsKIAogICAg
IGNvbnN0IGJvb2wgbV9pc1Jvb3RMYXllciA6IDE7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2MTc3YzJlMmQwYTA4YmI0
MThkYzQwYTc3ODNiY2RkZTZkZTA5NGI1Li5iYzAyNzU4ZDQyNTgwZDA5ZThkMTE5NzBiNTRiZWE5
NjNlNTIzYTAzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMDItMTUgIEdsZW5uIEhhcnRt
YW5uICA8aGFydG1hbm5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBTaW1wbGlmeSBsb2dpYyBm
b3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkIHNjcm9sbGluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MzAyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugc2ltcGxpZnkgdGhl
IGxvZ2ljIGZvciBhdXRvbWF0aWNhbGx5IG9wdGluZyBpbnRvIGNvbXBvc2l0ZWQKKyAgICAgICAg
c2Nyb2xsaW5nIGJ5IGdlbmVyYXRpbmcgdHdvIHNldHMgb2Ygei1vcmRlciBsaXN0cywgZmlyc3Qg
Zm9yY2luZyBhCisgICAgICAgIGxheWVyIHRvIG5vdCBwcm9tb3RlLCB0aGVuIGZvcmNpbmcgaXQg
dG8gcHJvbW90ZSB0aGUgc2Vjb25kIHRpbWUuIFRoZQorICAgICAgICB0d28gc2V0cyBvZiBsaXN0
cyBjYW4gYmUgcmVsYXRpdmVseSBlYXNpbHkgY29tcGFyZWQgZm9yIGFueSBwb3NzaWJsZQorICAg
ICAgICBjaGFuZ2UgaW4gc3RhY2tpbmcgb3JkZXIuIFRoaXMgc2hvdWxkIGJlIG1vcmUgaW50dWl0
aXZlIGFuZCBtb3JlCisgICAgICAgIHJvYnVzdCB0aGFuIHRoZSBjdXJyZW50IGltcGxlbWVudGF0
aW9uLgorCisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQt
aW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogY29tcG9z
aXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGlu
Zy5odG1sOgorICAgICAgICAqIGNvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0
ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGlu
Zy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDItMTUgIFN1ZGFyc2FuYSBOYWdpbmVu
aSAgPHN1ZGFyc2FuYS5uYWdpbmVuaUBpbnRlbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBF
RkwgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZs
b3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1p
bnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAppbmRleCBkZWVmNTE1MDJiNzlk
ZDA0ZGE0NzhkNTFlZjAyNDk3MThhNjQ5Mjc4Li44YjEzNzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBh
YWQ3YmRlZDA4YmRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxv
dy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9w
dC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dApAQCAtMSwxMjcgKzEgQEAK
LUl0ZXJhdGlvbiAwOiBQYXNzZWQKLUl0ZXJhdGlvbiAwLCBsYXllciB0cmVlCi1JdGVyYXRpb24g
MTogUGFzc2VkCi1JdGVyYXRpb24gMSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI6IFBhc3NlZAot
SXRlcmF0aW9uIDIsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzOiBQYXNzZWQKLUl0ZXJhdGlvbiAz
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDogUGFzc2VkCi1JdGVyYXRpb24gNCwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDU6IFBhc3NlZAotSXRlcmF0aW9uIDUsIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biA2OiBQYXNzZWQKLUl0ZXJhdGlvbiA2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNzogUGFzc2Vk
Ci1JdGVyYXRpb24gNywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDg6IFBhc3NlZAotSXRlcmF0aW9u
IDgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA5OiBQYXNzZWQKLUl0ZXJhdGlvbiA5LCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gMTA6IFBhc3NlZAotSXRlcmF0aW9uIDEwLCBsYXllciB0cmVl
Ci1JdGVyYXRpb24gMTE6IFBhc3NlZAotSXRlcmF0aW9uIDExLCBsYXllciB0cmVlCi1JdGVyYXRp
b24gMTI6IFBhc3NlZAotSXRlcmF0aW9uIDEyLCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTM6
IFBhc3NlZAotSXRlcmF0aW9uIDEzLCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTQ6IFBhc3Nl
ZAotSXRlcmF0aW9uIDE0LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTU6IFBhc3NlZAotSXRl
cmF0aW9uIDE1LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTY6IFBhc3NlZAotSXRlcmF0aW9u
IDE2LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTc6IFBhc3NlZAotSXRlcmF0aW9uIDE3LCBu
byBsYXllciB0cmVlCi1JdGVyYXRpb24gMTg6IFBhc3NlZAotSXRlcmF0aW9uIDE4LCBubyBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMTk6IFBhc3NlZAotSXRlcmF0aW9uIDE5LCBubyBsYXllciB0cmVl
Ci1JdGVyYXRpb24gMjA6IFBhc3NlZAotSXRlcmF0aW9uIDIwLCBsYXllciB0cmVlCi1JdGVyYXRp
b24gMjE6IFBhc3NlZAotSXRlcmF0aW9uIDIxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjI6IFBh
c3NlZAotSXRlcmF0aW9uIDIyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjM6IFBhc3NlZAotSXRl
cmF0aW9uIDIzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjQ6IFBhc3NlZAotSXRlcmF0aW9uIDI0
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjU6IFBhc3NlZAotSXRlcmF0aW9uIDI1LCBsYXllciB0
cmVlCi1JdGVyYXRpb24gMjY6IFBhc3NlZAotSXRlcmF0aW9uIDI2LCBsYXllciB0cmVlCi1JdGVy
YXRpb24gMjc6IFBhc3NlZAotSXRlcmF0aW9uIDI3LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjg6
IFBhc3NlZAotSXRlcmF0aW9uIDI4LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjk6IFBhc3NlZAot
SXRlcmF0aW9uIDI5LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzA6IFBhc3NlZAotSXRlcmF0aW9u
IDMwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzE6IFBhc3NlZAotSXRlcmF0aW9uIDMxLCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMzI6IFBhc3NlZAotSXRlcmF0aW9uIDMyLCBsYXllciB0cmVlCi1J
dGVyYXRpb24gMzM6IFBhc3NlZAotSXRlcmF0aW9uIDMzLCBsYXllciB0cmVlCi1JdGVyYXRpb24g
MzQ6IFBhc3NlZAotSXRlcmF0aW9uIDM0LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMzU6IFBh
c3NlZAotSXRlcmF0aW9uIDM1LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMzY6IFBhc3NlZAot
SXRlcmF0aW9uIDM2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzc6IFBhc3NlZAotSXRlcmF0aW9u
IDM3LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzg6IFBhc3NlZAotSXRlcmF0aW9uIDM4LCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gMzk6IFBhc3NlZAotSXRlcmF0aW9uIDM5LCBubyBsYXllciB0
cmVlCi1JdGVyYXRpb24gNDA6IFBhc3NlZAotSXRlcmF0aW9uIDQwLCBsYXllciB0cmVlCi1JdGVy
YXRpb24gNDE6IFBhc3NlZAotSXRlcmF0aW9uIDQxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDI6
IFBhc3NlZAotSXRlcmF0aW9uIDQyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDM6IFBhc3NlZAot
SXRlcmF0aW9uIDQzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDQ6IFBhc3NlZAotSXRlcmF0aW9u
IDQ0LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDU6IFBhc3NlZAotSXRlcmF0aW9uIDQ1LCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gNDY6IFBhc3NlZAotSXRlcmF0aW9uIDQ2LCBsYXllciB0cmVlCi1J
dGVyYXRpb24gNDc6IFBhc3NlZAotSXRlcmF0aW9uIDQ3LCBsYXllciB0cmVlCi1JdGVyYXRpb24g
NDg6IFBhc3NlZAotSXRlcmF0aW9uIDQ4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNDk6IFBh
c3NlZAotSXRlcmF0aW9uIDQ5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTA6IFBhc3NlZAot
SXRlcmF0aW9uIDUwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTE6IFBhc3NlZAotSXRlcmF0aW9u
IDUxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTI6IFBhc3NlZAotSXRlcmF0aW9uIDUyLCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gNTM6IFBhc3NlZAotSXRlcmF0aW9uIDUzLCBsYXllciB0cmVlCi1J
dGVyYXRpb24gNTQ6IFBhc3NlZAotSXRlcmF0aW9uIDU0LCBubyBsYXllciB0cmVlCi1JdGVyYXRp
b24gNTU6IFBhc3NlZAotSXRlcmF0aW9uIDU1LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTY6
IFBhc3NlZAotSXRlcmF0aW9uIDU2LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTc6IFBhc3Nl
ZAotSXRlcmF0aW9uIDU3LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTg6IFBhc3NlZAotSXRl
cmF0aW9uIDU4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTk6IFBhc3NlZAotSXRlcmF0aW9u
IDU5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNjA6IFBhc3NlZAotSXRlcmF0aW9uIDYwLCBs
YXllciB0cmVlCi1JdGVyYXRpb24gNjE6IFBhc3NlZAotSXRlcmF0aW9uIDYxLCBubyBsYXllciB0
cmVlCi1JdGVyYXRpb24gNjI6IFBhc3NlZAotSXRlcmF0aW9uIDYyLCBsYXllciB0cmVlCiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHkt
b3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0
aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcu
aHRtbAppbmRleCAxZTY3YjVkZDc4ZmI3MTFiYmUxNGMxNjYxODgzMmU2MTFkYWZhZjQwLi5lNDYy
OWRiY2FjMzY2MmVhZDA3ZTZiNWNlMThlYzIyZTA3YmFlZGZkIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0
ZWQtc2Nyb2xsaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cv
YXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy5odG1sCkBAIC0xMiwx
MiArMTIsMTQgQEAKICAgICAgIG92ZXJmbG93OiBzY3JvbGw7CiAgICAgICBtYXJnaW46IDIwcHg7
CiAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6
ICMwMEZGRkY7CiAgICAgfQogCiAgICAgLnNjcm9sbGVkIHsKICAgICAgIHdpZHRoOiAxODBweDsK
LSAgICAgIGhlaWdodDogOTBweDsKKyAgICAgIGhlaWdodDogMzBweDsKICAgICAgIG1hcmdpbjog
MTBweDsKKyAgICAgIHRvcDogNzBweDsKICAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CiAg
ICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgfQpAQCAtMjUsMjUgKzI3LDMyIEBACiAgICAg
LnBvc2l0aW9uZWQgewogICAgICAgd2lkdGg6IDEyMHB4OwogICAgICAgaGVpZ2h0OiAyNDBweDsK
LSAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOwogICAgICAgcG9zaXRpb246IGFic29sdXRl
OwogICAgIH0KIAorICAgICNzZWNvbmRDaGlsZCB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAj
Q0M5OTk5OworICAgICAgdG9wOiA1MHB4OworICAgIH0KKwogICAgICNwcmVkZWNlc3NvciB7CiAg
ICAgICBsZWZ0OiAyMHB4OwogICAgICAgdG9wOiAyMHB4OworICAgICAgYmFja2dyb3VuZC1jb2xv
cjogIzk5MDA2NjsKICAgICB9CiAKICAgICAjc3VjY2Vzc29yIHsKLSAgICAgIGxlZnQ6IDE2MHB4
OworICAgICAgbGVmdDogMjBweDsKICAgICAgIHRvcDogMjBweDsKKyAgICAgIGJhY2tncm91bmQt
Y29sb3I6ICMwMDAwNjY7CiAgICAgfQogCi0gICAgI2Rlc2NlbmRhbnQgewotICAgICAgbGVmdDog
OTBweDsKLSAgICAgIHRvcDogMjBweDsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7Ci0g
ICAgICB6LWluZGV4OiAtMjA7CisgICAgI25vcm1hbEZsb3cgeworICAgICAgd2lkdGg6IDE4MHB4
OworICAgICAgaGVpZ2h0OiAzMHB4OworICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgdG9wOiAt
MjBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKICAgICB9CiAgIDwvc3R5bGU+
CiAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CkBAIC01
Miw5ICs2MSw2IEBACiAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CiAKLSAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgIHdpbmRv
dy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93
U2Nyb2xsRW5hYmxlZCh0cnVlKTsKLQogICAgIGZ1bmN0aW9uIHdyaXRlKHN0cikKICAgICB7CiAg
ICAgICB2YXIgcHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKQEAgLTYy
LDE2OSArNjgsMTk0IEBACiAgICAgICBwcmUuYXBwZW5kQ2hpbGQodGV4dCk7CiAgICAgfQogCi0g
ICAgdmFyIGl0ZXJhdGlvbiA9IDA7Ci0gICAgZnVuY3Rpb24gcHJpbnRSZXN1bHQoZXhwZWN0ZWRS
ZXN1bHQpCisgICAgZnVuY3Rpb24gZGlkT3B0SW4oKQorICAgIHsKKyAgICAgIC8vIEZvcmNlIGEg
c3R5bGUgcmVjYWxjLgorICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIC8v
IEZvcmNlIGEgbGF5b3V0LgorICAgICAgd2luZG93LmludGVybmFscy5ib3VuZGluZ0JveChjb250
YWluZXIpOworICAgICAgdmFyIGxheWVyVHJlZSA9IHdpbmRvdy5pbnRlcm5hbHMubGF5ZXJUcmVl
QXNUZXh0KGRvY3VtZW50KTsKKworICAgICAgaWYgKGRlYnVnTW9kZSkKKyAgICAgICAgICB3cml0
ZShsYXllclRyZWUpOworCisgICAgICByZXR1cm4gISFsYXllclRyZWU7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZ2V0U3RhY2tpbmdPcmRlcigpCiAgICAgeworICAgICAgdmFyIGRpdkVsZW1lbnRz
ID0gW107CiAgICAgICAvLyBGb3JjZSBhIHN0eWxlIHJlY2FsYy4KICAgICAgIGRvY3VtZW50LmJv
ZHkub2Zmc2V0VG9wOwogCi0gICAgICBpZiAod2luZG93LmludGVybmFscykgewotICAgICAgICAv
LyBGb3JjZSBhIGxheW91dC4KLSAgICAgICAgd2luZG93LmludGVybmFscy5ib3VuZGluZ0JveChj
b250YWluZXIpOwotICAgICAgICB2YXIgbGF5ZXJUcmVlID0gd2luZG93LmludGVybmFscy5sYXll
clRyZWVBc1RleHQoZG9jdW1lbnQpOwotCi0gICAgICAgIGlmICghbGF5ZXJUcmVlID09ICFleHBl
Y3RlZFJlc3VsdCkKLSAgICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9T
dHJpbmcoKSArICc6IFBhc3NlZCcpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICB3cml0ZSgnSXRl
cmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJpbmcoKSArICc6IEZBSUxFRCcpCi0KLSAgICAgICAg
aWYgKGxheWVyVHJlZSkgewotICAgICAgICAgIHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlv
bi50b1N0cmluZygpICsgJywgbGF5ZXIgdHJlZScpOwotICAgICAgICAgIGlmIChkZWJ1Z01vZGUp
Ci0gICAgICAgICAgICAgIHdyaXRlKGxheWVyVHJlZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgIHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmluZygpICsgJywgbm8gbGF5
ZXIgdHJlZScpOworICAgICAgLy8gRm9yY2UgYSBsYXlvdXQuCisgICAgICB3aW5kb3cuaW50ZXJu
YWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisKKyAgICAgIHZhciBzdGFja2luZ09yZGVyID0g
d2luZG93LmludGVybmFscy5ub2Rlc0Zyb21SZWN0KGRvY3VtZW50LCAxMDAsIDc1LCAyMDAsIDIw
MCwgMjAwLCAyMDAsIGZhbHNlLCBmYWxzZSk7CisKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3RhY2tpbmdPcmRlci5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoc3RhY2tpbmdPcmRlcltp
XS5ub2RlTmFtZSA9PT0gIkRJViIpIHsKKyAgICAgICAgICBkaXZFbGVtZW50cy5wdXNoKHN0YWNr
aW5nT3JkZXJbaV0pOworICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpdGVyYXRpb24rKzsKKwor
ICAgICAgcmV0dXJuIGRpdkVsZW1lbnRzOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGRvVGVzdCgp
CiAgICAgeworICAgICAgdmFyIGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fu
Y2VzdG9yJyk7CiAgICAgICB2YXIgcHJlZGVjZXNzb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncHJlZGVjZXNzb3InKTsKICAgICAgIHZhciBzdWNjZXNzb3IgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc3VjY2Vzc29yJyk7CiAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOwogICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZmlyc3RDaGlsZCcpOwogICAgICAgdmFyIHNlY29uZENoaWxkID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29uZENoaWxkJyk7Ci0gICAgICB2YXIgZGVzY2Vu
ZGFudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXNjZW5kYW50Jyk7CiAgICAgICB2YXIg
Y291bnQgPSAwOwogCi0gICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0K
LSAgICAgIC8vIGRlc2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLgotICAgICAgZm9yIChpID0g
MDsgaSA8IDM7ICsraSkgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgNTsgKytqKSB7Ci0gICAg
ICAgICAgZm9yIChrID0gMDsgayA8IDI7ICsraykgewotICAgICAgICAgICAgZm9yIChsID0gMDsg
bCA8IDI7ICsrbCkgewotICAgICAgICAgICAgICB2YXIgbWluWkluZGV4ID0gMDsKLSAgICAgICAg
ICAgICAgdmFyIG1heFpJbmRleCA9IDA7Ci0gICAgICAgICAgICAgIGlmIChpID09IDApIHsKLSAg
ICAgICAgICAgICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICcxJzsKLSAgICAgICAgICAg
ICAgICBzZWNvbmRDaGlsZC5zdHlsZS56SW5kZXggPSAnMyc7Ci0gICAgICAgICAgICAgICAgbWF4
WkluZGV4ID0gMzsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IDEpIHsKLSAgICAgICAg
ICAgICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICctMSc7Ci0gICAgICAgICAgICAgICAg
c2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4ID0gJy0zJzsKLSAgICAgICAgICAgICAgICBtaW5aSW5k
ZXggPSAtMzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaXJzdENo
aWxkLnN0eWxlLnpJbmRleCA9ICctMSc7Ci0gICAgICAgICAgICAgICAgc2Vjb25kQ2hpbGQuc3R5
bGUuekluZGV4ID0gJzMnOwotICAgICAgICAgICAgICAgIG1pblpJbmRleCA9IC0xOwotICAgICAg
ICAgICAgICAgIG1heFpJbmRleCA9IDM7Ci0gICAgICAgICAgICAgIH0KKyAgICAgIGZvciAodmFy
IHNpYmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVyID0gMDsgc2libGluZ1Nob3Vs
ZEJlWmVyb0lmUHJlY2VkZXNDb250YWluZXIgPD0gMTsgKytzaWJsaW5nU2hvdWxkQmVaZXJvSWZQ
cmVjZWRlc0NvbnRhaW5lcikgeworICAgICAgICBmb3IgKHZhciBjb250YWluZXJJc1Bvc2l0aW9u
ZWQgPSAwOyBjb250YWluZXJJc1Bvc2l0aW9uZWQgPD0gMTsgKytjb250YWluZXJJc1Bvc2l0aW9u
ZWQpIHsKKyAgICAgICAgICBmb3IgKHZhciBzaWJsaW5nSXNTdWNjZXNzb3IgPSAwOyBzaWJsaW5n
SXNTdWNjZXNzb3IgPD0gMTsgKytzaWJsaW5nSXNTdWNjZXNzb3IpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9IDA7IGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA8
PSAxOyArK2hhc1Bvc2l0aW9uZWRBbmNlc3RvcikgeworICAgICAgICAgICAgICB2YXIgaW5kaWNl
cyA9IFsgMCwgMSwgMiwgMyBdOworICAgICAgICAgICAgICBmb3IgKHZhciBzaWJsaW5nSW5kZXgg
PSAwOyBzaWJsaW5nSW5kZXggPCA0OyArK3NpYmxpbmdJbmRleCkgeworICAgICAgICAgICAgICAg
IHZhciBzaWJsaW5nSW5kaWNlcyA9IGluZGljZXMuc2xpY2UoMCk7CisgICAgICAgICAgICAgICAg
c2libGluZ0luZGljZXMuc3BsaWNlKHNpYmxpbmdJbmRleCwgMSk7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgY29udGFpbmVyU3ViaW5kZXggPSAwOyBjb250YWluZXJTdWJpbmRleCA8IDM7ICsr
Y29udGFpbmVyU3ViaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJJbmRp
Y2VzID0gc2libGluZ0luZGljZXMuc2xpY2UoMCk7CisgICAgICAgICAgICAgICAgICB2YXIgY29u
dGFpbmVySW5kZXggPSBjb250YWluZXJJbmRpY2VzW2NvbnRhaW5lclN1YmluZGV4XTsKKyAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5lckluZGljZXMuc3BsaWNlKGNvbnRhaW5lclN1YmluZGV4LCAx
KTsKKyAgICAgICAgICAgICAgICAgIHZhciBmaXJzdENoaWxkSW5kZXggPSBjb250YWluZXJJbmRp
Y2VzWzBdOworICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZENoaWxkSW5kZXggPSBjb250YWlu
ZXJJbmRpY2VzWzFdOwogCi0gICAgICAgICAgICAgIHZhciBzaWJsaW5nID0gcHJlZGVjZXNzb3I7
Ci0gICAgICAgICAgICAgIHZhciB0b0hpZGUgPSBzdWNjZXNzb3I7Ci0gICAgICAgICAgICAgIGlm
IChrID09IDEpIHsKLSAgICAgICAgICAgICAgICBzaWJsaW5nID0gc3VjY2Vzc29yOwotICAgICAg
ICAgICAgICAgIHRvSGlkZSA9IHByZWRlY2Vzc29yOwotICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICB2YXIgc2libGluZ1ByZWNlZGVzQ29udGFpbmVyID0gc2libGluZ0luZGV4ID09
IGNvbnRhaW5lckluZGV4IC0gMTsKKyAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkSW5k
ZXggPiBzZWNvbmRDaGlsZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAxICYmIGhhc1Bv
c2l0aW9uZWRBbmNlc3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFp
bmVyID09IDEgJiYgIXNpYmxpbmdQcmVjZWRlc0NvbnRhaW5lcikKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgIHZhciBvcmRlcmluZyA9IFsgbnVsbCwg
bnVsbCwgbnVsbCwgbnVsbCBdOworICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbc2libGluZ0lu
ZGV4XSA9IHNpYmxpbmdJc1N1Y2Nlc3NvciA9PSAxID8gc3VjY2Vzc29yIDogcHJlZGVjZXNzb3I7
CisgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tjb250YWluZXJJbmRleF0gPSBoYXNQb3NpdGlv
bmVkQW5jZXN0b3IgPT0gMSA/IGFuY2VzdG9yIDogY29udGFpbmVyOworICAgICAgICAgICAgICAg
ICAgb3JkZXJpbmdbZmlyc3RDaGlsZEluZGV4XSA9IGZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAg
ICAgICBvcmRlcmluZ1tzZWNvbmRDaGlsZEluZGV4XSA9IHNlY29uZENoaWxkOworCisgICAgICAg
ICAgICAgICAgICB2YXIgc2libGluZyA9IHByZWRlY2Vzc29yOworICAgICAgICAgICAgICAgICAg
dmFyIHRvSGlkZSA9IHN1Y2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nSXNT
dWNjZXNzb3IgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBzaWJsaW5nID0gc3VjY2Vzc29y
OworICAgICAgICAgICAgICAgICAgICB0b0hpZGUgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgdG9IaWRlLnN0eWxlLmRpc3BsYXkgPSAnbm9u
ZSc7CisgICAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnJzsKKworICAg
ICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uZWQgPSBudWxsOworICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICAgICAgICAgICAgICAg
IHBvc2l0aW9uZWQgPSBjb250YWluZXI7CisgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJyc7CiAKLSAgICAgICAg
ICAgICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUgaWYgdGhlIHRoZSBlbGVtZW50
IHRvIGhpZGUgaXMKLSAgICAgICAgICAgICAgLy8gZGlzcGxheTpoaWRkZW4gb3IgZGlzcGxheTpu
b25lLgotICAgICAgICAgICAgICBpZiAobCA9PSAwKQotICAgICAgICAgICAgICAgIHRvSGlkZS5z
dHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgdG9IaWRlLnN0eWxlLmRpc3BsYXkgPSAnaGlkZGVuJzsKLQotICAgICAgICAgICAgICBzaWJs
aW5nLnN0eWxlLmRpc3BsYXkgPSAnJzsKLQotICAgICAgICAgICAgICBpZiAoaiA9PSAwKQotICAg
ICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gKG1heFpJbmRleCArIDEpLnRvU3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGogPT0gMSkKLSAgICAgICAgICAgICAgICBz
aWJsaW5nLnN0eWxlLnpJbmRleCA9IChtaW5aSW5kZXggLSAxKS50b1N0cmluZygpOwotICAgICAg
ICAgICAgICBlbHNlIGlmIChqID09IDIpCi0gICAgICAgICAgICAgICAgc2libGluZy5zdHlsZS56
SW5kZXggPSBtYXhaSW5kZXgudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoaiA9
PSAzKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gbWluWkluZGV4LnRv
U3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0
eWxlLnpJbmRleCA9ICgobWluWkluZGV4ICsgbWF4WkluZGV4KSAvIDIpLnRvU3RyaW5nKCk7Ci0K
LSAgICAgICAgICAgICAgdmFyIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
aWYgKHNpYmxpbmcuc3R5bGUuekluZGV4ID4gbWF4WkluZGV4IHx8Ci0gICAgICAgICAgICAgICAg
ICBzaWJsaW5nLnN0eWxlLnpJbmRleCA8IG1pblpJbmRleCkgewotICAgICAgICAgICAgICAgICAg
Ly8gc2libGluZyBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBvdXIgZGVzY2VuZGFudHMuCi0gICAg
ICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfSBlbHNl
IGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA8IG1heFpJbmRleCAmJgotICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID4gbWluWkluZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgICAvLyBzaWJsaW5nIGlzIGJldHdlZW4gb3VyIGRlc2NlbmRhbnRzLgotICAgICAgICAg
ICAgICAgICAgYXJlQ29udGlndW91cyA9IGZhbHNlOwotICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHNpYmxpbmcuc3R5bGUuekluZGV4ID09IG1pblpJbmRleCkgewotICAgICAgICAgICAgICAgICAg
aWYgKG1pblpJbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBs
aWVzIGJldHdlZW4gdXMgKG5vcm1hbCBmbG93KSBhbmQgb3VyIHBvcwotICAgICAgICAgICAgICAg
ICAgICAgIC8vIHotb3JkZXIgZGVzY2VuZGFudHMsIHNvIHdlIGFyZSBub3QgY29udGlndW91cy4K
LSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcncyB6SW5k
ZXggbWF0Y2hlcyB0aGUgbWluOyB3ZSdyZSBvbmx5IG9rIGlmIGl0Ci0gICAgICAgICAgICAgICAg
ICAgICAgLy8gYXBwZWFycyBmaXJzdC4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1
b3VzID0gayA9PSAwOworICAgICAgICAgICAgICAgICAgaWYgKGhhc1Bvc2l0aW9uZWRBbmNlc3Rv
ciA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLnN0eWxlLnBvc2l0aW9uID0g
J3JlbGF0aXZlJzsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCA9IGFuY2VzdG9yOwor
ICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLnN0
eWxlLnBvc2l0aW9uID0gJyc7CisKKyAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB6LWluZGlj
ZXMuCisgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySXNQb3NpdGlvbmVkID09IDEgfHwg
aGFzUG9zaXRpb25lZEFuY2VzdG9yID09IDEpCisgICAgICAgICAgICAgICAgICAgIG9yZGVyaW5n
W2NvbnRhaW5lckluZGV4XS5zdHlsZS56SW5kZXggPSAnMCc7CisgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnpJbmRleCA9ICcnOwor
ICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS56SW5kZXggPSAnJzsKICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWJsaW5nLnN0eWxlLnpJbmRl
eCA9PSBtYXhaSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChtYXhaSW5kZXggPCAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBsaWVzIGJldHdlZW4gdXMgKG5vcm1h
bCBmbG93KSBhbmQgbmVnIHotb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNjZW5k
YW50cywgc28gd2UgYXJlIG5vdCBjb250aWd1b3VzLgotICAgICAgICAgICAgICAgICAgICAgIGFy
ZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4Wklu
ZGV4ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIGlzIGluIHRoZSBw
b3Mgei1vcmRlciBsaXN0IGFuZCBkb2VzIG5vdCBhZmZlY3QKLSAgICAgICAgICAgICAgICAgICAg
ICAvLyB1cyBzaW5jZSB3ZSdyZSBpbiB0aGUgbm9ybWFsIGZsb3cgbGlzdCBhbmQgb3VyCi0gICAg
ICAgICAgICAgICAgICAgICAgLy8gZGVzY2FuZGFudHMgYXJlIGluIHRoZSBuZWcgei1vcmRlciBs
aXN0LgotICAgICAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nJ3Mg
ekluZGV4IG1hdGNoZXMgdGhlIG1heDsgd2UncmUgb25seSBvayBpZiBpdAotICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFwcGVhcnMgYWZ0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgYXJlQ29u
dGlndW91cyA9IGsgPT0gMTsKKworICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRaSW5kZXgg
PSBzaWJsaW5nUHJlY2VkZXNDb250YWluZXIgJiYgc2libGluZ1Nob3VsZEJlWmVyb0lmUHJlY2Vk
ZXNDb250YWluZXIgPT0gMSA/IDAgOiAtMTsKKyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1
cnJlbnRJbmRleCA9IGNvbnRhaW5lckluZGV4IC0gMTsgY3VycmVudEluZGV4ID49IDA7IC0tY3Vy
cmVudEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW2N1cnJlbnRJbmRleF0u
c3R5bGUuekluZGV4ID0gY3VycmVudFpJbmRleC50b1N0cmluZygpOworICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50WkluZGV4LS07CiAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICBwcmludFJlc3VsdChhcmVDb250aWd1b3VzKTsKLSAgICAgICAg
ICAgIH0gLy8gZm9yIGwKLSAgICAgICAgICB9IC8vIGZvciBrCi0gICAgICAgIH0gLy8gZm9yIGoK
LSAgICAgIH0gLy8gZm9yIGkKLQotICAgICAgLy8gTm93IGNoZWNrIHRoYXQgd2UgZG9uJ3QgcHJv
bW90ZSBpZiB3ZSBoYXZlIGFuIG91dCBvZiBmbG93IGRlc2NlbmRhbnQuCi0gICAgICAvLyBXZSBu
ZWVkIHRvIGhpZGUgdGhlIHByZWRlY2Vzc29yIGFuZCBzdWNjZXNzb3Igc28gdGhleSBkb24ndCBp
bnRlcmZlcmUKLSAgICAgIC8vIHdpdGggdGhpcyBleHBlcmltZW50LgotICAgICAgcHJlZGVjZXNz
b3Iuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgIHN1Y2Nlc3Nvci5zdHlsZS5kaXNwbGF5
ID0gJ25vbmUnOwotICAgICAgZm9yIChpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAo
aSA9PSAwKQotICAgICAgICAgIGRlc2NlbmRhbnQuc3R5bGUuZGlzcGxheSA9ICdoaWRkZW4nOwot
ICAgICAgICBlbHNlIGlmIChpID09IDEpCi0gICAgICAgICAgZGVzY2VuZGFudC5zdHlsZS5kaXNw
bGF5ID0gJyc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3Bs
YXkgPSAnbm9uZSc7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG91dCBvZiBmbG93IHBvc2l0aW9uZWQg
ZGVzY2VuZGFudCBpcyB2aXNpYmxlLCB3ZSBjYW5ub3Qgb3B0Ci0gICAgICAgIC8vIGludG8gY29t
cG9zaXRlZCBzY3JvbGxpbmcuCi0gICAgICAgIHByaW50UmVzdWx0KGkgIT0gMSk7Ci0gICAgICAg
IGNvdW50Kys7Ci0gICAgICB9IC8vIGZvciBpCisgICAgICAgICAgICAgICAgICBjdXJyZW50Wklu
ZGV4ID0gMTsKKyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1cnJlbnRJbmRleCA9IGNvbnRh
aW5lckluZGV4ICsgMTsgY3VycmVudEluZGV4IDwgNDsgKytjdXJyZW50SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgb3JkZXJpbmdbY3VycmVudEluZGV4XS5zdHlsZS56SW5kZXggPSBjdXJy
ZW50WkluZGV4LnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRaSW5kZXgr
KzsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5p
bnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVsb3csIHdoZW4gd2Ugc2V0IHdl
YmtpdFRyYW5zZm9ybSB0byAnJywgd2Ugd2FudCB0aGF0IHRvIGZvcmNlIGEgc3R5bGUgcmVjYWxj
dWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gTWFraW5nIHRoaXMgbm90ICcnIGhlcmUg
d2lsbCBmb3JjZSB0aGlzIHJlY2FsY3VsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWigwcHgpJzsKKyAgICAgICAg
ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZm9yY2UgdG8gbm90IHByb21vdGUuCisgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5p
bnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Ny
b2xsRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53
ZWJraXRUcmFuc2Zvcm0gPSAnJzsKKworICAgICAgICAgICAgICAgICAgICB2YXIgb2xkU3RhY2tp
bmdPcmRlciA9IGdldFN0YWNraW5nT3JkZXIoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBm
b3JjZSB0byBwcm9tb3RlLgorICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNl
dHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zv
cm0gPSAndHJhbnNsYXRlWigwcHgpJzsKKworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3U3Rh
Y2tpbmdPcmRlciA9IGdldFN0YWNraW5nT3JkZXIoKTsKIAorICAgICAgICAgICAgICAgICAgICB2
YXIgc2hvdWxkT3B0SW4gPSBvbGRTdGFja2luZ09yZGVyLmxlbmd0aCA9PSBuZXdTdGFja2luZ09y
ZGVyLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGRT
dGFja2luZ09yZGVyLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKG9s
ZFN0YWNraW5nT3JkZXJbaV0gIT0gbmV3U3RhY2tpbmdPcmRlcltpXSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkT3B0SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAn
JzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE9wdEluICE9IGRpZE9wdEluKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkT3B0SW4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlKCJGQUlMIC0gc2hvdWxkJ3ZlIGF1dG9tYXRpY2FsbHkgb3B0ZWQgaW4g
YnV0IGRpZG4ndCAiICsgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnRkFJTCAtIGF1dG9tYXRpY2FsbHkgb3B0ZWQg
aW4gYW5kIGNoYW5nZWQgc3RhY2tpbmcgb3JkZXIgJyArIGNvdW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY291
bnQrKzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KICAg
ICB9IC8vIGZ1bmN0aW9uIGRvVGVzdAogCisgICAgZnVuY3Rpb24gdG9nZ2xlKCkgeworICAgICAg
dmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKKyAg
ICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBjb250YWluZXIuc3R5bGUud2Vi
a2l0VHJhbnNmb3JtID8gJycgOiAndHJhbnNsYXRlWigwcHgpJzsKKworICAgICAgLy8gRm9yY2Ug
YSBzdHlsZSByZWNhbGMuCisgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKworICAgICAg
Ly8gRm9yY2UgYSBsYXlvdXQuCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNv
bnRhaW5lcik7CisgICAgfQorCiAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBk
b1Rlc3QsIGZhbHNlKTsKICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CiAKIDxib2R5PgotICA8ZGl2IGNs
YXNzPSJwb3NpdGlvbmVkIiBpZD0icHJlZGVjZXNzb3IiPjwvZGl2PgotICA8ZGl2IGNsYXNzPSJj
b250YWluZXIiIGlkPSJjb250YWluZXIiPgotICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0i
Zmlyc3RDaGlsZCI+PC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJzZWNvbmRD
aGlsZCI+PC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9ImRlc2NlbmRhbnQi
PjwvZGl2PgorICA8ZGl2IGlkPSJhbmNlc3RvciI+CisgICAgPGRpdiBjbGFzcz0icG9zaXRpb25l
ZCIgaWQ9InByZWRlY2Vzc29yIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIGlk
PSJjb250YWluZXIiPgorICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJmaXJzdENoaWxk
Ij48L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0ic2Vjb25kQ2hpbGQiPjwv
ZGl2PgorICAgICAgPGRpdiBpZD0ibm9ybWFsRmxvdyI+PC9kaXY+CisgICAgPC9kaXY+CisgICAg
PGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InN1Y2Nlc3NvciI+PC9kaXY+CiAgIDwvZGl2Pgot
ICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0ic3VjY2Vzc29yIj48L2Rpdj4KICAgPHByZSBp
ZD0iY29uc29sZSI+PC9wcmU+CiA8L2JvZHk+CiA8L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5n
LXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRp
bmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNl
c3Rvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThjMTBkYmExZjhhYmFjYTRkZjI5MTMxOWFm
MmUyY2I3NjdhNjlkOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5n
L292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0
b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorUGFzc2VkIC0gbGF5ZXIgdHJlZS4KKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29t
cG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sIGIvTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRp
b25lZC1hbmNlc3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjA1YWU5ZGFjNTU0MGE5OGUwYmJkZDUw
Mjg4ZDM2NDdkM2MwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGlu
Zy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2Vz
dG9yLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzND
Ly9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICAiaHR0cDovL3d3dy53My5vcmcv
VFIvaHRtbDQvbG9vc2UuZHRkIj4KKworPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgIDxtZXRh
IGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0
Zi04Ii8+CisgIDx0aXRsZT5PcHRpbmcgaW50byBjb21wb3NpdGVkIHNjcm9sbGluZzwvdGl0bGU+
CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgLmNvbnRhaW5l
ciB7CisgICAgICB3aWR0aDogMjAwcHg7CisgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgb3Zl
cmZsb3c6IHNjcm9sbDsKKyAgICAgIG1hcmdpbjogMjBweDsKKyAgICAgIGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOworICAgIH0KKworICAgIC5zY3JvbGxlZCB7CisgICAgICB3aWR0aDogMTgwcHg7
CisgICAgICBoZWlnaHQ6IDkwcHg7CisgICAgICBtYXJnaW46IDEwcHg7CisgICAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiBncmF5OworICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKworICAg
IC5wb3NpdGlvbmVkIHsKKyAgICAgIHdpZHRoOiAxMjBweDsKKyAgICAgIGhlaWdodDogMjQwcHg7
CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgfQorCisgICAgI2ZpcnN0Q2hpbGQgewor
ICAgICAgei1pbmRleDogMTsKKyAgICB9CisKKyAgICAjc2Vjb25kQ2hpbGQgeworICAgICAgei1p
bmRleDogMjsKKyAgICB9CisKKyAgICAjcHJlZGVjZXNzb3IgeworICAgICAgbGVmdDogMjBweDsK
KyAgICAgIHRvcDogMjBweDsKKyAgICAgIHotaW5kZXg6IDA7CisgICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBncmVlbjsKKyAgICB9CisKKyAgICAjYW5jZXN0b3IgeworICAgICAgYmFja2dyb3VuZC1j
b2xvcjogYmx1ZTsKKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICB2YXIgZGVidWdNb2RlID0gZmFsc2U7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgd2luZG93LmludGVybmFscy5z
ZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVk
KHRydWUpOworCisgICAgZnVuY3Rpb24gd3JpdGUoc3RyKQorICAgIHsKKyAgICAgIHZhciBwcmUg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAgICAgdmFyIHRleHQgPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIgKyAnXG4nKTsKKyAgICAgIHByZS5hcHBlbmRDaGls
ZCh0ZXh0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkb1Rlc3QoKQorICAgIHsKKyAgICAgIHZh
ciBwcmVkZWNlc3NvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVkZWNlc3NvcicpOwor
ICAgICAgdmFyIGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuY2VzdG9yJyk7
CisgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5l
cicpOworICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmly
c3RDaGlsZCcpOworICAgICAgdmFyIHNlY29uZENoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3NlY29uZENoaWxkJyk7CisKKyAgICAgIC8vIEZvcmNlIGEgc3R5bGUgcmVjYWxjLgorICAg
ICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxz
KSB7CisgICAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgICB3aW5kb3cuaW50ZXJuYWxz
LmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisgICAgICAgIHZhciBsYXllclRyZWUgPSB3aW5kb3cu
aW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCk7CisKKyAgICAgICAgaWYgKCFsYXll
clRyZWUpCisgICAgICAgICAgd3JpdGUoJ0ZBSUxFRCAtIG5vIGxheWVyIHRyZWUuJykKKyAgICAg
ICAgZWxzZQorICAgICAgICAgIHdyaXRlKCdQYXNzZWQgLSBsYXllciB0cmVlLicpCisKKyAgICAg
ICAgaWYgKGxheWVyVHJlZSAmJiBkZWJ1Z01vZGUpCisgICAgICAgICAgICB3cml0ZShsYXllclRy
ZWUpOworICAgICAgfQorICAgIH0gLy8gZnVuY3Rpb24gZG9UZXN0CisKKyAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHk+CisgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJwcmVkZWNlc3NvciI+
PC9kaXY+CisgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJhbmNlc3RvciI+CisgICAgPGRp
diBjbGFzcz0iY29udGFpbmVyIiBpZD0iY29udGFpbmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9InNj
cm9sbGVkIiBpZD0iZmlyc3RDaGlsZCI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGxl
ZCIgaWQ9InNlY29uZENoaWxkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisgIDxwcmUg
aWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYWU4M2E5MThhOGZjNDc4YTI4
OGZlNjY4NDQwNThhNzA1NDdmZjliNy4uMjVlOTg1ZjcxMzYyNGZhYTBhMTJiZDhiMTQwOWVhZTUy
ODE1YjE2NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0
YXRpb25zCkBAIC0zNjc2LDYgKzM2NzYsMTMgQEAgd2Via2l0Lm9yZy9iLzEwMzE1NiBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9jb21wb3NpdGVkc2Nyb2xsaW5nL3Njcm9sbGJhcnMKICMg
UmVxdWlyZXMgYW4gdXBkYXRlZCBiYXNlbGluZSBhZnRlciAxMDYxNDIuCiB3ZWJraXQub3JnL2Iv
MTA2ODIwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcv
b3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgWyBGYWlsdXJlIF0KIAorIyBOZWVkcyByZWJh
c2VsaW5lIGFmdGVyIDEwOTMwMi4KK3dlYmtpdC5vcmcvYi8xMDk5NjUgcGxhdGZvcm0vY2hyb21p
dW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9vdmVyZmxvdy90ZXh0YXJlYS1zY3Jv
bGwtdG91Y2guaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzEwOTk2NSBwbGF0Zm9ybS9j
aHJvbWl1bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcvb3ZlcmZsb3cvdGV4dGFyZWEtc2Ny
b2xsLXRvdWNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xMDk5NjUgcGxhdGZvcm0v
Y2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9zY3JvbGxiYXJzL292ZXJm
bG93LXNjcm9sbGJhci1jb21iaW5hdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzEwOTk2NSBjb21wb3NpdGluZy9vdmVyZmxvdy90ZXh0YXJlYS1zY3JvbGwtdG91Y2guaHRtbCBb
IEZhaWx1cmUgXQorCisKICMgRmFpbHMgZHVlIHRvIEJ1ZyA4NTg1Ni4KIHdlYmtpdC5vcmcvYi84
NTg1NiBbIFdpbiBNYWMgQW5kcm9pZCBdIGZhc3QvYmxvY2svZmxvYXQvMDI4Lmh0bWwgWyBJbWFn
ZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84NTg1NiBbIFdpbiBNYWMgQW5kcm9pZCBdIGZh
c3QvYmxvY2svZmxvYXQvMDI2Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189137</attachid>
            <date>2013-02-19 12:10:36 -0800</date>
            <delta_ts>2013-02-27 13:18:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130219150657.patch</filename>
            <type>text/plain</type>
            <size>48091</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTBhZTRkNjk2MjNjNDY2
NDc1YzliMmVjMmJkMTQzZTFiMjQ3NzliNS4uNGNhZWI0NmE2ODAzOTdhYWM2NGQzOWMzOWZjMjJj
YTAzYzVkMzM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTE5ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIHNob3VsZCBiZSBtb3Jl
IGludHVpdGl2ZSBhbmQgbW9yZQorICAgICAgICByb2J1c3QgdGhhbiB0aGUgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKworICAgICAgICBUZXN0OiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50
by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWwKKyAgICAgICAg
VGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3Np
dGVkLXNjcm9sbGluZy5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzUG9zaXRpb25lZENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRh
aW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250
YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUlzTm9ybWFsRmxv
d09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJMaXN0c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVT
dGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aDoKKyAgICAgICAgKFJlbmRlckxheWVyKToKKwogMjAxMy0wMi0xNSAgQW5kcmVhcyBLbGluZyAg
PGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRWxlbWVudERhdGE6IE1vdmUgbGVhZnkgdGhp
bmdzIG91dCBvZiB0aGUgYmFzZSBjbGFzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCmluZGV4IDQwOGJkYjliNWU1OTNmZjQ4ODYzOTU2MDQ4NDczMTlkM2FkZDAzNzcu
LjlmNTNkNmI0MjE4NDhiMzhmZDcxMTNjN2YwZWQ1MGQxZDgzMDBhZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFJlbmRlckxh
eWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZW5kZXJlcikKICAgICAs
IG1faGFzT3V0T2ZGbG93UG9zaXRpb25lZERlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc091
dE9mRmxvd1Bvc2l0aW9uZWREZXNjZW5kYW50RGlydHkodHJ1ZSkKICAgICAsIG1fbmVlZHNDb21w
b3NpdGVkU2Nyb2xsaW5nKGZhbHNlKQotICAgICwgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJ
blN0YWNraW5nT3JkZXIoZmFsc2UpCisgICAgLCBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nY29u
dGFpbmVyKGZhbHNlKQogICAgICwgbV9pc1Jvb3RMYXllcihyZW5kZXJlci0+aXNSZW5kZXJWaWV3
KCkpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5z
aWRlUmVmbGVjdGlvbihmYWxzZSkKQEAgLTUyMiwxNjMgKzUyMiwxODMgQEAgYm9vbCBSZW5kZXJM
YXllcjo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpIGNv
bnN0CiAgICAgICAgICYmIHJlbmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpOwogfQogCi0v
LyBJZiB3ZSBhcmUgYSBzdGFja2luZyBjb250YWluZXIsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxs
IGRldGVybWluZSBpZiBvdXIKLS8vIGRlc2NlbmRhbnRzIGZvciBhIGNvbnRpZ3VvdXMgYmxvY2sg
aW4gc3RhY2tpbmcgb3JkZXIuIFRoaXMgaXMgcmVxdWlyZWQgaW4KLS8vIG9yZGVyIGZvciBhbiBl
bGVtZW50IHRvIGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gSXQg
aXMgc2FmZQotLy8gdG8gYmVjb21lIGEgc3RhY2tpbmcgY29udGFpbmVyIGlmIHRoaXMgY2hhbmdl
IHdvdWxkIG5vdCBhbHRlciB0aGUgc3RhY2tpbmcKLS8vIG9yZGVyIG9mIGxheWVycyBvbiB0aGUg
cGFnZS4gVGhhdCBjYW4gb25seSBoYXBwZW4gaWYgYSBub24tZGVzY2VuZGFudCBhcHBlYXIKLS8v
IGJldHdlZW4gdXMgYW5kIG91ciBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4gSGVyZSdz
IGFuIGV4YW1wbGU6Ci0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgfCAgXC4KLS8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEEgICBCICAgQwotLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvXCAgIHwgICAvXC4KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC04
ICBEICAyICA3Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLS8vCi0vLyBJJ3ZlIGxhYmVsZWQgb3Vy
IG5vcm1hbCBmbG93IGRlc2NlbmRhbnRzIEEsIEIsIEMsIGFuZCBELCBvdXIgc3RhY2tpbmcKLS8v
IGNvbnRhaW5lciBkZXNjZW5kYW50cyB3aXRoIHRoZWlyIHogaW5kaWNlcywgYW5kIHVzIHdpdGgg
J3RoaXMnICh3ZSdyZSBhCi0vLyBzdGFja2luZyBjb250YWluZXIgYW5kIG91ciB6SW5kZXggZG9l
c24ndCBtYXR0ZXIgaGVyZSkuIFRoZXNlIG5vZGVzIGFwcGVhciBpbgotLy8gdGhyZWUgbGlzdHM6
IHBvc1pPcmRlciwgbmVnWk9yZGVyLCBhbmQgbm9ybWFsIGZsb3cgKGtlZXAgaW4gbWluZCB0aGF0
IG5vcm1hbAotLy8gZmxvdyBsYXllcnMgZG9uJ3Qgb3ZlcmxhcCkuIFNvIGlmIHdlIGFycmFuZ2Ug
dGhlc2UgbGlzdHMgaW4gb3JkZXIgd2UgZ2V0IG91cgotLy8gc3RhY2tpbmcgb3JkZXI6Ci0vLwot
Ly8gICAgICAgICAgICAgICAgICAgICBbLThdLCBbQS1EXSwgWzAsIDIsIDUsIDddLS0+IHBvcyB6
LW9yZGVyLgotLy8gICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwKLS8vICAgICAgICBOZWcg
ei1vcmRlci4gPC0rICAgICArLS0+IE5vcm1hbCBmbG93IGRlc2NlbmRhbnRzLgotLy8KLS8vIFdl
IGNhbiB0aGVuIGFzc2lnbiBuZXcsICdzdGFja2luZycgb3JkZXIgaW5kaWNlcyB0byB0aGVzZSBl
bGVtZW50cyBhcyBmb2xsb3dzOgotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgWy04XSwgW0Et
RF0sIFswLCAyLCA1LCA3XQotLy8gJ1N0YWNraW5nJyBpbmRpY2VzOiAgLTEgICAgIDAgICAgIDEg
IDIgIDMgIDQKLS8vCi0vLyBOb3RlIHRoYXQgdGhlIG5vcm1hbCBmbG93IGRlc2NlbmRhbnRzIGNh
biBzaGFyZSBhbiBpbmRleCBiZWNhdXNlIHRoZXkgZG9uJ3QKLS8vIHN0YWNrL292ZXJsYXAuIE5v
dyBvdXIgcHJvYmxlbSBiZWNvbWVzIHZlcnkgc2ltcGxlOiBhIGxheWVyIGNhbiBzYWZlbHkgYmVj
b21lCi0vLyBhIHN0YWNraW5nIGNvbnRhaW5lciBpZiB0aGUgc3RhY2tpbmctb3JkZXIgaW5kaWNl
cyBvZiBpdCBhbmQgaXRzIGRlc2NlbmRhbnRzCi0vLyBhcHBlYXIgaW4gYSBjb250aWd1b3VzIGJs
b2NrIGluIHRoZSBsaXN0IG9mIHN0YWNraW5nIGluZGljZXMuIFRoaXMgcHJvYmxlbQotLy8gY2Fu
IGJlIHNvbHZlZCB2ZXJ5IGVmZmljaWVudGx5IGJ5IGNhbGN1bGF0aW5nIHRoZSBtaW4vbWF4IHN0
YWNraW5nIGluZGljZXMgaW4KLS8vIHRoZSBzdWJ0cmVlLCBhbmQgdGhlIG51bWJlciBzdGFja2lu
ZyBjb250YWluZXIgZGVzY2VuZGFudHMuIE9uY2Ugd2UgaGF2ZSB0aGlzCi0vLyBpbmZvcm1hdGlv
biwgd2Uga25vdyB0aGF0IHRoZSBzdWJ0cmVlJ3MgaW5kaWNlcyBmb3JtIGEgY29udGlndW91cyBi
bG9jayBpZjoKLS8vCi0vLyAgICAgICAgICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXgg
PT0gbnVtU0NEZXNjZW5kYW50cwotLy8KLS8vIFNvIGZvciBub2RlIEEgaW4gdGhlIGV4YW1wbGUg
YWJvdmUgd2Ugd291bGQgaGF2ZToKLS8vICAgbWF4U3RhY2tJbmRleCA9IDEKLS8vICAgbWluU3Rh
Y2tJbmRleCA9IC0xCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9IDIKLS8vCi0vLyBhbmQgc28sCi0v
LyAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rlc2NlbmRhbnRz
Ci0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAxIC0gKC0xKSA9PSAyCi0vLyAgPT09PiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9PSAyCi0vLwotLy8gIFNpbmNlIHRoaXMgaXMg
dHJ1ZSwgQSBjYW4gc2FmZWx5IGJlY29tZSBhIHN0YWNraW5nIGNvbnRhaW5lci4KLS8vICBOb3cs
IGZvciBub2RlIEMgd2UgaGF2ZToKLS8vCi0vLyAgIG1heFN0YWNrSW5kZXggPSA0Ci0vLyAgIG1p
blN0YWNrSW5kZXggPSAwIDwtLSBiZWNhdXNlIEMgaGFzIHN0YWNraW5nIGluZGV4IDAuCi0vLyAg
IG51bVNDRGVjZW5kYW50cyA9IDIKLS8vCi0vLyBhbmQgc28sCi0vLyAgICAgICBtYXhTdGFja0lu
ZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rlc2NlbmRhbnRzCi0vLyAgPT09PiAgICAgICAg
ICAgICAgICAgICAgICAgICA0IC0gMCA9PSAyCi0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNCA9PSAyCi0vLwotLy8gU2luY2UgdGhpcyBpcyBmYWxzZSwgQyBjYW5ub3QgYmUg
c2FmZWx5IHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVyLiBUaGlzCi0vLyBoYXBwZW5l
ZCBiZWNhdXNlIG9mIHRoZSBlbGVtZW50cyB3aXRoIHotaW5kZXggNSBhbmQgMC4gTm93IGlmIDUg
aGFkIGJlZW4gYQotLy8gY2hpbGQgb2YgQyByYXRoZXIgdGhhbiBELCBhbmQgQSBoYWQgbm8gY2hp
bGQgd2l0aCBaIGluZGV4IDAsIHdlIHdvdWxkIGhhdmUgaGFkOgotLy8KLS8vICAgbWF4U3RhY2tJ
bmRleCA9IDMKLS8vICAgbWluU3RhY2tJbmRleCA9IDAgPC0tIGJlY2F1c2UgQyBoYXMgc3RhY2tp
bmcgaW5kZXggMC4KLS8vICAgbnVtU0NEZWNlbmRhbnRzID0gMwotLy8KLS8vIGFuZCBzbywKLS8v
ICAgICAgIG1heFN0YWNrSW5kZXggLSBtaW5TdGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMK
LS8vICA9PT0+ICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAwID09IDMKLS8vICA9PT0+ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAzID09IDMKLS8vCi0vLyAgQW5kIHdlIHdvdWxkIGNv
bmNsdWRlIHRoYXQgQyBjb3VsZCBiZSBwcm9tb3RlZC4KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcigpCi17Ci0gICAgaWYgKCFp
c1N0YWNraW5nQ29udGV4dCgpIHx8ICFhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dT
Y3JvbGxFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9ub3JtYWxG
bG93TGlzdERpcnR5KTsKLSAgICBBU1NFUlQoIW1fek9yZGVyTGlzdHNEaXJ0eSk7CitzdGF0aWMg
aW5saW5lIGJvb2wgaXNQb3NpdGlvbmVkQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
cikKK3sKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBsYXllclJlbmRlcmVyID0gbGF5ZXIt
PnJlbmRlcmVyKCk7CisgICAgcmV0dXJuIGxheWVyLT5pc1Jvb3RMYXllcigpIHx8IGxheWVyUmVu
ZGVyZXItPmlzUG9zaXRpb25lZCgpIHx8IGxheWVyLT5oYXNUcmFuc2Zvcm0oKTsKK30KIAotICAg
IE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IHBvc1pPcmRlckxpc3Q7Ci0gICAgT3duUHRy
PFZlY3RvcjxSZW5kZXJMYXllcio+ID4gbmVnWk9yZGVyTGlzdDsKLSAgICByZWJ1aWxkWk9yZGVy
TGlzdHMoU3RvcEF0U3RhY2tpbmdDb250ZXh0cywgcG9zWk9yZGVyTGlzdCwgbmVnWk9yZGVyTGlz
dCk7CisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIg
dG8gc2ltcGxpZnkgaW5kZXhpbmcgaW50bworLy8gdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB6
LW9yZGVyIGxpc3RzLCB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZW0gYm90aAorLy8gZnJvbSBs
ZWZ0LXRvLXJpZ2h0IGFuZCByaWdodC10by1sZWZ0Lgorc3RhdGljIGNvbnN0IFJlbmRlckxheWVy
KiBnZXRTdGFja2luZ09yZGVyRWxlbWVudEF0KGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiBw
b3NaT3JkZXJMaXN0LCBjb25zdCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCwg
Y29uc3QgYm9vbCBmcm9tTGVmdCwgY29uc3Qgc2l6ZV90IGluZGV4KQoreworICAgIHNpemVfdCBu
ZWdaT3JkZXJMaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QgPyBuZWdaT3JkZXJMaXN0LT5zaXplKCkg
OiAwOwogCi0gICAgLy8gQ3JlYXRlIGEgcmV2ZXJzZSBsb29rdXAuCi0gICAgSGFzaE1hcDxjb25z
dCBSZW5kZXJMYXllciosIGludD4gbG9va3VwOworICAgIGlmIChmcm9tTGVmdCkgeworICAgICAg
ICBpZiAoaW5kZXggPCBuZWdaT3JkZXJMaXN0U2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBuZWda
T3JkZXJMaXN0LT5hdChpbmRleCk7CiAKLSAgICBpZiAobmVnWk9yZGVyTGlzdCkgewotICAgICAg
ICBpbnQgc3RhY2tpbmdPcmRlckluZGV4ID0gLTE7Ci0gICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9
IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogY3VycmVudExheWVyID0g
bmVnWk9yZGVyTGlzdC0+YXQobGlzdFNpemUgLSBpIC0gMSk7Ci0gICAgICAgICAgICBpZiAoIWN1
cnJlbnRMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGxvb2t1cC5zZXQoY3VycmVudExheWVyLCBzdGFja2luZ09yZGVySW5k
ZXgtLSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBvc1pPcmRlckxpc3QtPmF0KGluZGV4
IC0gbmVnWk9yZGVyTGlzdFNpemUpOwogICAgIH0KIAotICAgIGlmIChwb3NaT3JkZXJMaXN0KSB7
Ci0gICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKLSAgICAg
ICAgaW50IHN0YWNraW5nT3JkZXJJbmRleCA9IDE7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1cnJlbnRM
YXllciA9IHBvc1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50TGF5
ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBsb29rdXAuc2V0KGN1cnJlbnRMYXllciwgc3RhY2tpbmdPcmRlckluZGV4KyspOwot
ICAgICAgICB9Ci0gICAgfQorICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZSA9IHBvc1pPcmRl
ckxpc3QgPyBwb3NaT3JkZXJMaXN0LT5zaXplKCkgOiAwOwogCi0gICAgaW50IG1pbkluZGV4ID0g
MDsKLSAgICBpbnQgbWF4SW5kZXggPSAwOwotICAgIGludCBjb3VudCA9IDA7Ci0gICAgYm9vbCBm
aXJzdEl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3Vz
SW5TdGFja2luZ09yZGVyUmVjdXJzaXZlKGxvb2t1cCwgbWluSW5kZXgsIG1heEluZGV4LCBjb3Vu
dCwgZmlyc3RJdGVyYXRpb24pOworICAgIGlmIChpbmRleCA8IHBvc1pPcmRlckxpc3RTaXplKQor
ICAgICAgICByZXR1cm4gcG9zWk9yZGVyTGlzdC0+YXQocG9zWk9yZGVyTGlzdFNpemUgLSBpbmRl
eCAtIDEpOworCisgICAgcmV0dXJuIG5lZ1pPcmRlckxpc3QtPmF0KG5lZ1pPcmRlckxpc3RTaXpl
IC0gKHBvc1pPcmRlckxpc3RTaXplIC0gaW5kZXgpIC0gMSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2
ZShjb25zdCBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgaW50PiYgbG9va3VwLCBpbnQmIG1p
bkluZGV4LCBpbnQmIG1heEluZGV4LCBpbnQmIGNvdW50LCBib29sIGZpcnN0SXRlcmF0aW9uKQor
Ly8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRv
IGEgc3RhY2tpbmcgY29udGFpbmVyLAorLy8gZ2l2ZW4gaXRzIGNsb3Nlc3Qgc3RhY2tpbmcgY29u
dGV4dCBhbmNlc3Rvci4gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgd2hhdAorLy8gcG9zaXRpdmUg
YW5kIG5lZ2F0aXZlIHotb3JkZXIgbGlzdHMgd291bGQgbG9vayBsaWtlIGJlZm9yZSBhbmQgYWZ0
ZXIKKy8vIHByb21vdGlvbiwgYW5kIGVuc3VyaW5nIHRoYXQgcHJvcGVyIHN0YWNraW5nIG9yZGVy
IGlzIHByZXNlcnZlZCBiZXR3ZWVuIHRoZQorLy8gdHdvIHNldHMgb2YgbGlzdHMuCit2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKFJlbmRlckxheWVyKiBhbmNl
c3RvclN0YWNraW5nQ29udGV4dCkKIHsKLSAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQoKSAmJiAh
Zmlyc3RJdGVyYXRpb24pIHsKLSAgICAgICAgaWYgKGxvb2t1cC5jb250YWlucyh0aGlzKSkgewot
ICAgICAgICAgICAgbWluSW5kZXggPSBzdGQ6Om1pbihtaW5JbmRleCwgbG9va3VwLmdldCh0aGlz
KSk7Ci0gICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBsb29rdXAuZ2V0
KHRoaXMpKTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KKyAgICBpZiAoaXNTdGFj
a2luZ0NvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgLy8gVE9ETyAoaGFydG1hbm5n
QGNocm9taXVtLm9yZyk6IFdlIGNhbiBlYXJseS1vdXQgb2YgdGhpcyBmdW5jdGlvbiBtb3JlCisg
ICAgLy8gb2Z0ZW4gaWYgd2UgbWFpbnRhaW4gYSBkaXJ0eSBiaXQgZm9yIHRoZQorICAgIC8vIG1f
Y2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWluZXIgcHJvcGVydHkKKyAgICAvLyAoaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTk2NikKKworICAgIHVwZGF0ZU5v
cm1hbEZsb3dMaXN0KCk7CisKKyAgICBBU1NFUlQoIW1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7CisK
KyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0QmVmb3JlUHJv
bW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBuZWdaT3JkZXJMaXN0QmVm
b3JlUHJvbW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJM
aXN0QWZ0ZXJQcm9tb3RlOworICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pP
cmRlckxpc3RBZnRlclByb21vdGU7CisKKyAgICAvLyBXZSBjYW4ndCB1c2UgVGVtcG9yYXJ5Q2hh
bmdlPD4gaGVyZSBzaW5jZSBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyBhbmQKKyAgICAvLyBt
X2lzTm9ybWFsRmxvd09ubHkgYXJlIGJvdGggYml0ZmllbGRzLCBzbyB3ZSBoYXZlIHRvIGRvIGl0
IHRoZQorICAgIC8vIG9sZC1mYXNoaW9uZWQgd2F5LgorICAgIGJvb2wgb2xkTmVlZHNDb21wb3Np
dGVkU2Nyb2xsaW5nID0gbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmc7CisgICAgYm9vbCBvbGRJ
c05vcm1hbEZsb3dPbmx5ID0gbV9pc05vcm1hbEZsb3dPbmx5OworCisgICAgLy8gU2V0IHRoZSBm
bGFnIG9uIHRoZSBjdXJyZW50IGxheWVyLCB0aGVuIHJlYnVpbGQgYW5jZXN0b3Igc3RhY2tpbmcK
KyAgICAvLyBjb250ZXh0J3MgbGlzdHMuIFRoaXMgd2F5LCB3ZSBjYW4gc2VlIHRoZSBleGFjdCBl
ZmZlY3RzIHRoYXQgcHJvbW90aW5nCisgICAgLy8gdGhpcyBsYXllciB3b3VsZCBjYXVzZS4KKyAg
ICBtX2lzTm9ybWFsRmxvd09ubHkgPSB0cnVlOworICAgIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xs
aW5nID0gZmFsc2U7CisgICAgYW5jZXN0b3JTdGFja2luZ0NvbnRleHQtPnJlYnVpbGRaT3JkZXJM
aXN0cyhTdG9wQXRTdGFja2luZ0NvbnRhaW5lcnMsIHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3Rl
LCBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSk7CisKKyAgICBtX2lzTm9ybWFsRmxvd09ubHkg
PSBmYWxzZTsKKyAgICBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IHRydWU7CisgICAgYW5j
ZXN0b3JTdGFja2luZ0NvbnRleHQtPnJlYnVpbGRaT3JkZXJMaXN0cyhTdG9wQXRTdGFja2luZ0Nv
bnRhaW5lcnMsIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUsIG5lZ1pPcmRlckxpc3RBZnRlclBy
b21vdGUpOworCisgICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBvbGROZWVkc0NvbXBv
c2l0ZWRTY3JvbGxpbmc7CisgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gb2xkSXNOb3JtYWxGbG93
T25seTsKKworICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBwb3Na
T3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA/IHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXpl
KCkgOiAwOworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBuZWda
T3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA/IG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXpl
KCkgOiAwOworICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IHBvc1pP
cmRlckxpc3RBZnRlclByb21vdGUgPyBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkg
OiAwOworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IG5lZ1pPcmRl
ckxpc3RBZnRlclByb21vdGUgPyBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAw
OworCisgICAgYm9vbCBoYXNCYWNrZ3JvdW5kID0gcmVuZGVyZXIoKS0+aGFzQmFja2dyb3VuZCgp
OworICAgIGJvb2wgd2VBcmVQb3NpdGlvbmVkID0gcmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCk7
CisKKyAgICBjb25zdCBSZW5kZXJMYXllciogcG9zaXRpb25lZEFuY2VzdG9yID0gcGFyZW50KCk7
CisgICAgd2hpbGUgKHBvc2l0aW9uZWRBbmNlc3RvciAmJiAhaXNQb3NpdGlvbmVkQ29udGFpbmVy
KHBvc2l0aW9uZWRBbmNlc3RvcikgJiYgIXBvc2l0aW9uZWRBbmNlc3Rvci0+aXNTdGFja2luZ0Nv
bnRleHQoKSkKKyAgICAgICAgcG9zaXRpb25lZEFuY2VzdG9yID0gcG9zaXRpb25lZEFuY2VzdG9y
LT5wYXJlbnQoKTsKKyAgICBpZiAocG9zaXRpb25lZEFuY2VzdG9yICYmICghaXNQb3NpdGlvbmVk
Q29udGFpbmVyKHBvc2l0aW9uZWRBbmNlc3RvcikgfHwgcG9zaXRpb25lZEFuY2VzdG9yLT5pc1N0
YWNraW5nQ29udGV4dCgpKSkKKyAgICAgICAgcG9zaXRpb25lZEFuY2VzdG9yID0gMDsKKworICAg
IC8vIEluc2VydCB0aGlzIGludG8gdGhlIHBvc1pPcmRlcmlzdEJlZm9yZVByb21vdGUgZGlyZWN0
bHkgYWZ0ZXIgdGhlCisgICAgLy8gcG9zaXRpb25lZCBhbmNlc3RvciwgaWYgdGhlcmUgaXMgb25l
LiBPdGhlcndpc2UsIGFkZCBpdCB0byB0aGUgdmVyeQorICAgIC8vIGJlZ2lubmluZy4KKyAgICBp
ZiAoIXdlQXJlUG9zaXRpb25lZCkgeworICAgICAgICBpZiAoIXBvc2l0aW9uZWRBbmNlc3Rvcikg
eworICAgICAgICAgICAgaWYgKCFwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSkKKyAgICAgICAg
ICAgICAgICBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
UmVuZGVyTGF5ZXIqPigpKTsKKworICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21v
dGUtPnByZXBlbmQodGhpcyk7CisgICAgICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVBy
b21vdGUrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGU7IGluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICBpZiAocG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPmF0KGluZGV4
KSA9PSBwb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVy
TGlzdEJlZm9yZVByb21vdGUtPmluc2VydChpbmRleCArIDEsIHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUrKzsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CiAgICAgfQogCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGludCBjaGlsZE1p
bkluZGV4ID0gMDsKLSAgICAgICAgaW50IGNoaWxkTWF4SW5kZXggPSAwOwotICAgICAgICBpbnQg
Y2hpbGRDb3VudCA9IDA7Ci0gICAgICAgIGNoaWxkLT51cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRp
Z3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUobG9va3VwLCBjaGlsZE1pbkluZGV4LCBjaGls
ZE1heEluZGV4LCBjaGlsZENvdW50LCBmYWxzZSk7Ci0gICAgICAgIGlmIChjaGlsZENvdW50KSB7
Ci0gICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwotICAgICAgICAgICAgbWluSW5kZXgg
PSBzdGQ6Om1pbihtaW5JbmRleCwgY2hpbGRNaW5JbmRleCk7Ci0gICAgICAgICAgICBtYXhJbmRl
eCA9IHN0ZDo6bWF4KG1heEluZGV4LCBjaGlsZE1heEluZGV4KTsKKyAgICBzaXplX3Qgc2l6ZUJl
Zm9yZVByb21vdGUgPSBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgKyBuZWdaT3JkZXJM
aXN0U2l6ZUJlZm9yZVByb21vdGU7CisgICAgc2l6ZV90IHNpemVBZnRlclByb21vdGUgPSBwb3Na
T3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSArIG5lZ1pPcmRlckxpc3RTaXplQWZ0ZXJQcm9tb3Rl
OworCisgICAgYm9vbCBjYW5Qcm9tb3RlID0gdHJ1ZTsKKworICAgIC8vIFNjYW4gb3ZlciB0aGUg
bGlzdHMgdHdpY2UgLSB0aGUgZmlyc3QgdGltZSBmcm9tIGxlZnQtdG8tcmlnaHQgYW5kIHRoZQor
ICAgIC8vIHNlY29uZCBmcm9tIHJpZ2h0LXRvLWxlZnQgLSBlYWNoIHRpbWUgc3RvcHBpbmcgd2hl
biB3ZSBoaXQgdGhpcyBpbgorICAgIC8vIHRoZSBhZnRlci1wcm9tb3RlIGxpc3QuIFdlIGNoZWNr
IGFsb25nIHRoZSB3YXkgZm9yIGFueSBpbmNvbnNpc3RlbmNpZXMKKyAgICAvLyBiZXR3ZWVuIHRo
ZSB0d28gbGlzdHMgdGhhdCBjb3VsZCBjYXVzZSBhIGNoYW5nZSBpbiBwYWludCBvcmRlciBpZiB3
ZQorICAgIC8vIHByb21vdGUuCisgICAgZm9yIChpbnQgcGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNz
KyspIHsKKyAgICAgICAgYm9vbCBmcm9tTGVmdCA9IHBhc3M7CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IHNpemVCZWZvcmVQcm9tb3RlICYmIGluZGV4IDwgc2l6ZUFm
dGVyUHJvbW90ZTsgaW5kZXgrKykgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxh
eWVyQmVmb3JlUHJvbW90ZSA9IGdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQocG9zWk9yZGVyTGlz
dEJlZm9yZVByb21vdGUuZ2V0KCksIG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLmdldCgpLCBm
cm9tTGVmdCwgaW5kZXgpOworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyQWZ0
ZXJQcm9tb3RlID0gZ2V0U3RhY2tpbmdPcmRlckVsZW1lbnRBdChwb3NaT3JkZXJMaXN0QWZ0ZXJQ
cm9tb3RlLmdldCgpLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLmdldCgpLCBmcm9tTGVmdCwg
aW5kZXgpOworCisgICAgICAgICAgICBpZiAobGF5ZXJCZWZvcmVQcm9tb3RlICE9IGxheWVyQWZ0
ZXJQcm9tb3RlKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBhIG1pc21hdGNoLCB0
aGUgb25seSBzaXR1YXRpb24gd2hlcmUgd2UgaGF2ZW4ndAorICAgICAgICAgICAgICAgIC8vIG5l
Y2Vzc2FyaWx5IGNoYW5nZWQgcGFpbnQgb3JkZXIgeWV0IGlzIGlmIGxheWVyQWZ0ZXJQcm9tb3Rl
CisgICAgICAgICAgICAgICAgLy8gaXMgdGhpcy4KKyAgICAgICAgICAgICAgICBpZiAobGF5ZXJB
ZnRlclByb21vdGUgIT0gdGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYW5Qcm9tb3RlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIEFsc28sIGlmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIGJhY2tn
cm91bmQsIHRoZW4gYW55CisgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgei1vcmRlciBjaGls
ZHJlbiB3aWxsIGdldCBiZXR3ZWVuIHRoZSBiYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgLy8g
YW5kIHRoZSByZXN0IG9mIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICBpZiAocGFzcyAmJiBo
YXNCYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGNhblByb21vdGUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobGF5ZXJBZnRlclByb21vdGUgPT0gdGhpcykKKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGlmICghY2FuUHJvbW90ZSkK
KyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmICghaXNTdGFja2luZ0NvbnRleHQo
KSkgewotICAgICAgICBib29sIG5ld1ZhbHVlID0gbWF4SW5kZXggLSBtaW5JbmRleCA9PSBjb3Vu
dDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGJvb2wgZGlkVXBk
YXRlID0gbmV3VmFsdWUgIT0gbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3Jk
ZXI7CisgICAgYm9vbCBkaWRVcGRhdGUgPSAoY2FuUHJvbW90ZSAhPSBtX2NhbkJlUHJvbW90ZWRU
b1N0YWNraW5nY29udGFpbmVyKTsKICNlbmRpZgotICAgICAgICBtX2Rlc2NlbmRhbnRzQXJlQ29u
dGlndW91c0luU3RhY2tpbmdPcmRlciA9IG5ld1ZhbHVlOworCisgICAgbV9jYW5CZVByb21vdGVk
VG9TdGFja2luZ2NvbnRhaW5lciA9IGNhblByb21vdGU7CisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgICAgIGlmIChkaWRVcGRhdGUpCi0gICAgICAgICAgICB1cGRhdGVO
ZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBpZiAoZGlkVXBkYXRlKQorICAgICAgICB1
cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKICNlbmRpZgotICAgIH0KIH0KIAorLy8g
Y2FsbCB1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyIGZvciBhbGwgZGVzY2VuZGFudHMgb2YK
Ky8vIHN0YWNraW5nIGNvbnRleHQgImFuY2VzdG9yU3RhY2tpbmdDb250ZXh0Igordm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlQ2FuQ2hpbGRyZW5CZVN0YWNraW5nQ29udGFpbmVycyhSZW5kZXJMYXll
ciogYW5jZXN0b3JTdGFja2luZ0NvbnRleHQsIGJvb2wgZmlyc3RQYXNzKQoreworICAgIGlmIChp
c1N0YWNraW5nQ29udGV4dCgpICYmICFmaXJzdFBhc3MpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghZmlyc3RQYXNzKQorICAgICAgICB1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKGFu
Y2VzdG9yU3RhY2tpbmdDb250ZXh0KTsKKworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgY2hpbGQtPnVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRhaW5lcnMoYW5jZXN0b3JT
dGFja2luZ0NvbnRleHQsIGZhbHNlKTsKK30KKworCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRl
UmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkKIHsKICAgICBBU1NFUlQo
IW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSk7CkBAIC05MzcsNyArOTU3LDcgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6Y2FuQmVTdGFja2luZ0NvbnRhaW5lcigpIGNvbnN0CiAgICAgaWYgKGlzU3Rh
Y2tpbmdDb250ZXh0KCkgfHwgIXN0YWNraW5nQ29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgcmV0dXJuIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09y
ZGVyOworICAgIHJldHVybiBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nY29udGFpbmVyOwogfQog
CiB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWaXNpYmxlQ29udGVudCgpCkBAIC0xMjU0LDEyICsx
Mjc0LDYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpzdGFja2luZ0NvbnRhaW5lcigpIGNv
bnN0CiAgICAgcmV0dXJuIGxheWVyOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb3NpdGlv
bmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKLXsKLSAgICBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiBsYXllclJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIGxh
eWVyLT5pc1Jvb3RMYXllcigpIHx8IGxheWVyUmVuZGVyZXItPmlzUG9zaXRpb25lZCgpIHx8IGxh
eWVyLT5oYXNUcmFuc2Zvcm0oKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGlzRml4ZWRQb3Np
dGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIt
PmlzUm9vdExheWVyKCkgfHwgbGF5ZXItPmhhc1RyYW5zZm9ybSgpOwpAQCAtMTg5NSw2ICsxOTA5
LDE5IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Om5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0
CiAgICAgcmV0dXJuIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOwogfQogCit2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVJc05vcm1hbEZsb3dPbmx5KCkKK3sKKyAgICBib29sIGlzTm9ybWFsRmxv
d09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7CisgICAgaWYgKGlzTm9ybWFsRmxvd09u
bHkgIT0gbV9pc05vcm1hbEZsb3dPbmx5KSB7CisgICAgICAgIG1faXNOb3JtYWxGbG93T25seSA9
IGlzTm9ybWFsRmxvd09ubHk7CisgICAgICAgIFJlbmRlckxheWVyKiBwID0gcGFyZW50KCk7Cisg
ICAgICAgIGlmIChwKQorICAgICAgICAgICAgcC0+ZGlydHlOb3JtYWxGbG93TGlzdCgpOworICAg
ICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMoKTsKKyAgICB9Cit9CisKKwog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKIHsKICAg
ICBib29sIG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IG1fbmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nOwpAQCAtMTkyMiw2ICsxOTQ5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTmVl
ZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKICAgICAgICAgICAgIGNsZWFyWk9yZGVyTGlzdHMoKTsK
IAogICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMoKTsKKyAgICAgICAg
dXBkYXRlSXNOb3JtYWxGbG93T25seSgpOwogCiAgICAgICAgIGNvbXBvc2l0b3IoKS0+c2V0U2hv
dWxkUmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQoKTsKICAgICAgICAgY29tcG9zaXRv
cigpLT5zZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKCk7CkBAIC01MjY3LDcgKzUyOTUs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxh
eWVycywgQ29sbGVjdExheWVyc0JlaGF2aW9yCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyTGlzdHNJZk5lZWRlZCgpCiB7Ci0gICAgYm9vbCBzaG91bGRVcGRhdGVEZXNjZW5kYW50c0Fy
ZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIgPSBpc1N0YWNraW5nQ29udGV4dCgpICYmIChtX3pP
cmRlckxpc3RzRGlydHkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5KTsKKyAgICBib29sIHNob3Vs
ZFVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIgPSBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
T3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkgJiYgaXNTdGFja2luZ0NvbnRleHQoKSAmJiAobV96T3Jk
ZXJMaXN0c0RpcnR5IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7CiAgICAgdXBkYXRlWk9yZGVy
TGlzdHMoKTsKICAgICB1cGRhdGVOb3JtYWxGbG93TGlzdCgpOwogCkBAIC01Mjc2LDggKzUzMDQs
MTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCkKICAgICAg
ICAgcmVmbGVjdGlvbkxheWVyLT51cGRhdGVOb3JtYWxGbG93TGlzdCgpOwogICAgIH0KIAotICAg
IGlmIChzaG91bGRVcGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIp
IHsKLSAgICAgICAgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVy
KCk7CisgICAgaWYgKHNob3VsZFVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIpIHsKKyAgICAg
ICAgLy8gY2FsbCBVcGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyIGZvciBhbGwgZGVzY2VuZGFu
dHMsCisgICAgICAgIC8vIHBhc3Npbmcgc2VsZiBpbiBhcyBhbmNlc3RvciBzdGFja2luZyBjb250
ZXh0LgorICAgICAgICB1cGRhdGVDYW5DaGlsZHJlbkJlU3RhY2tpbmdDb250YWluZXJzKHRoaXMs
IHRydWUpOworCiAgICAgICAgIC8vIFRoZSBhYm92ZSBmdW5jdGlvbiBjYW4gY2F1c2UgdXMgdG8g
dXBkYXRlIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAgIC8vIGFuZCBkaXJ0eSBv
dXIgbGF5ZXIgbGlzdHMuIFJlZnJlc2ggdGhlbSBpZiBuZWNlc3NhcnkuCiAgICAgICAgIHVwZGF0
ZVpPcmRlckxpc3RzKCk7CkBAIC01NDY0LDcgKzU0OTUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSog
b2xkUwogICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQgPSB0aGlzLT5pc1N0YWNraW5nQ29udGV4
dCgpOwogICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCAhPSB3YXNTdGFja2luZ0NvbnRleHQpIHsK
ICAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3RzKCk7Ci0gICAgICAgIGlm
IChpc1N0YWNraW5nQ29udGV4dCkKKyAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0IHx8IGlz
U3RhY2tpbmdDb250YWluZXIoKSkKICAgICAgICAgICAgIGRpcnR5Wk9yZGVyTGlzdHMoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgY2xlYXJaT3JkZXJMaXN0cygpOwpAQCAtNTQ3NSw3ICs1
NTA2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5
bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFMKICAgICAvLyBsaWtlbHkgYmUgZm9sZGVk
IGFsb25nIHdpdGggdGhlIHJlc3QuCiAgICAgaWYgKG9sZFN0eWxlLT56SW5kZXgoKSAhPSByZW5k
ZXJlcigpLT5zdHlsZSgpLT56SW5kZXgoKSB8fCBvbGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJl
bmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSkgewogICAgICAgICBkaXJ0eVN0YWNraW5n
Q29udGFpbmVyWk9yZGVyTGlzdHMoKTsKLSAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KQor
ICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2luZ0NvbnRhaW5lcigpKQog
ICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0cygpOwogICAgIH0KIH0KQEAgLTU1NjQsMTQgKzU1
OTUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIAogdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAgIGJv
b2wgaXNOb3JtYWxGbG93T25seSA9IHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKTsKLSAgICBpZiAo
aXNOb3JtYWxGbG93T25seSAhPSBtX2lzTm9ybWFsRmxvd09ubHkpIHsKLSAgICAgICAgbV9pc05v
cm1hbEZsb3dPbmx5ID0gaXNOb3JtYWxGbG93T25seTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHAg
PSBwYXJlbnQoKTsKLSAgICAgICAgaWYgKHApCi0gICAgICAgICAgICBwLT5kaXJ0eU5vcm1hbEZs
b3dMaXN0KCk7Ci0gICAgICAgIGRpcnR5U3RhY2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygpOwot
ICAgIH0KKyAgICB1cGRhdGVJc05vcm1hbEZsb3dPbmx5KCk7CiAKICAgICBpZiAocmVuZGVyZXIo
KS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTU5PTkUgJiYgcmVuZGVyZXIoKS0+aXNCb3goKSkgewog
ICAgICAgICBpZiAoIW1fbWFycXVlZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKaW5kZXggM2Y2MDM1ZDRhYTlmNmY4Y2Y3OGVjMjQ2YjdmMDJkYTJiMDUxMTA5Yi4uNzUzZTNj
YzZhNTVmYTExMjAxZDhlOGFjZmZjMTZiMjVlZjU1OTExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKQEAgLTc5Niw4ICs3OTYsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGRpcnR5QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygp
OwogCiAgICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFi
bGVkKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0
YWNraW5nT3JkZXIoKTsKLSAgICB2b2lkIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0lu
U3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShjb25zdCBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwg
aW50PiYsIGludCYgbWluSW5kZXgsIGludCYgbWF4SW5kZXgsIGludCYgY291bnQsIGJvb2wgZmly
c3RJdGVyYXRpb24pOworCisgICAgYm9vbCBpc1Byb21vdGVkTGF5ZXJMaXN0SW5Db3JyZWN0U3Rh
Y2tpbmdPcmRlcihjb25zdCBWZWN0b3I8Y29uc3QgUmVuZGVyTGF5ZXIqPiYsIGNvbnN0IFZlY3Rv
cjxjb25zdCBSZW5kZXJMYXllcio+JikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVDYW5CZVN0YWNr
aW5nQ29udGFpbmVyKFJlbmRlckxheWVyKik7CisgICAgdm9pZCB1cGRhdGVDYW5DaGlsZHJlbkJl
U3RhY2tpbmdDb250YWluZXJzKFJlbmRlckxheWVyKiwgYm9vbCk7CiAKICAgICB2b2lkIGNvbXB1
dGVSZXBhaW50UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqID0gMCk7CiAgICAgdm9pZCBjb21wdXRlUmVw
YWludFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKQEAgLTgxOSw2ICs4MjEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluSGFzT3V0T2ZGbG93UG9zaXRpb25lZERl
c2NlbmRhbnRTdGF0dXMoKTsKICAgICB2b2lkIHVwZGF0ZU91dE9mRmxvd1Bvc2l0aW9uZWQoY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAorICAgIHZvaWQgdXBkYXRlSXNOb3JtYWxGbG93
T25seSgpOwogICAgIHZvaWQgdXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiAKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBvc2l0aW9uIGNoYW5nZWQuCkBAIC0xMDY3LDcgKzEw
NzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCB0aGVuIG5vIG5vbi1k
ZXNjZW5kYW50IGFwcGVhcnMgYmV0d2VlbiBhbnkgb2Ygb3VyCiAgICAgLy8gZGVzY2VuZGFudHMg
aW4gc3RhY2tpbmcgb3JkZXIuIFRoaXMgaXMgb25lIG9mIHRoZSByZXF1aXJlbWVudHMgb2YgYmVp
bmcKICAgICAvLyBhYmxlIHRvIHNhZmVseSBiZWNvbWUgYSBzdGFja2luZyBjb250ZXh0LgotICAg
IGJvb2wgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIgOiAxOworICAg
IGJvb2wgbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ2NvbnRhaW5lciA6IDE7CiAKICAgICBjb25z
dCBib29sIG1faXNSb290TGF5ZXIgOiAxOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjE3N2MyZTJkMGEwOGJiNDE4ZGM0
MGE3NzgzYmNkZGU2ZGUwOTRiNS4uMGRiOWI3Yzc0YmRjODVlZjUxNWQ5YTlhNWU2ZjQ0NzhjZjFk
YjNjOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTAyLTE5ICBHbGVubiBIYXJ0bWFubiAg
PGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkgbG9naWMgZm9yIGF1
dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBsaWZ5IHRoZSBsb2dp
YyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisgICAgICAgIHNjcm9s
bGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMsIGZpcnN0IGZvcmNp
bmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3JjaW5nIGl0IHRvIHBy
b21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMgb2YgbGlzdHMgY2Fu
IGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2libGUKKyAgICAgICAg
Y2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIHNob3VsZCBiZSBtb3JlIGludHVpdGl2ZSBh
bmQgbW9yZQorICAgICAgICByb2J1c3QgdGhhbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4K
KworICAgICAgICAqIGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8t
Y29tcG9zaXRlZC1zY3JvbGxpbmctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGNvbXBvc2l0aW5n
L292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRt
bDoKKyAgICAgICAgKiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNj
cm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9z
aXRpb25lZC1hbmNlc3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEzLTAyLTE1ICBTdWRhcnNhbmEgTmFnaW5lbmkgIDxz
dWRhcnNhbmEubmFnaW5lbmlAaW50ZWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgRUZMIGdh
cmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1
dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1j
b21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQKaW5kZXggZGVlZjUxNTAyYjc5ZGQwNGRh
NDc4ZDUxZWYwMjQ5NzE4YTY0OTI3OC4uOGIxMzc4OTE3OTFmZTk2OTI3YWQ3OGU2NGIwYWFkN2Jk
ZWQwOGJkYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0
b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50
by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQKQEAgLTEsMTI3ICsxIEBACi1JdGVy
YXRpb24gMDogUGFzc2VkCi1JdGVyYXRpb24gMCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE6IFBh
c3NlZAotSXRlcmF0aW9uIDEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyOiBQYXNzZWQKLUl0ZXJh
dGlvbiAyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzogUGFzc2VkCi1JdGVyYXRpb24gMywgbGF5
ZXIgdHJlZQotSXRlcmF0aW9uIDQ6IFBhc3NlZAotSXRlcmF0aW9uIDQsIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiA1OiBQYXNzZWQKLUl0ZXJhdGlvbiA1LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNjog
UGFzc2VkCi1JdGVyYXRpb24gNiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDc6IFBhc3NlZAotSXRl
cmF0aW9uIDcsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA4OiBQYXNzZWQKLUl0ZXJhdGlvbiA4LCBu
byBsYXllciB0cmVlCi1JdGVyYXRpb24gOTogUGFzc2VkCi1JdGVyYXRpb24gOSwgbm8gbGF5ZXIg
dHJlZQotSXRlcmF0aW9uIDEwOiBQYXNzZWQKLUl0ZXJhdGlvbiAxMCwgbGF5ZXIgdHJlZQotSXRl
cmF0aW9uIDExOiBQYXNzZWQKLUl0ZXJhdGlvbiAxMSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDEy
OiBQYXNzZWQKLUl0ZXJhdGlvbiAxMiwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDEzOiBQYXNz
ZWQKLUl0ZXJhdGlvbiAxMywgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE0OiBQYXNzZWQKLUl0
ZXJhdGlvbiAxNCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE1OiBQYXNzZWQKLUl0ZXJhdGlv
biAxNSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE2OiBQYXNzZWQKLUl0ZXJhdGlvbiAxNiwg
bm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE3OiBQYXNzZWQKLUl0ZXJhdGlvbiAxNywgbm8gbGF5
ZXIgdHJlZQotSXRlcmF0aW9uIDE4OiBQYXNzZWQKLUl0ZXJhdGlvbiAxOCwgbm8gbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDE5OiBQYXNzZWQKLUl0ZXJhdGlvbiAxOSwgbm8gbGF5ZXIgdHJlZQotSXRl
cmF0aW9uIDIwOiBQYXNzZWQKLUl0ZXJhdGlvbiAyMCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDIx
OiBQYXNzZWQKLUl0ZXJhdGlvbiAyMSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDIyOiBQYXNzZWQK
LUl0ZXJhdGlvbiAyMiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDIzOiBQYXNzZWQKLUl0ZXJhdGlv
biAyMywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI0OiBQYXNzZWQKLUl0ZXJhdGlvbiAyNCwgbGF5
ZXIgdHJlZQotSXRlcmF0aW9uIDI1OiBQYXNzZWQKLUl0ZXJhdGlvbiAyNSwgbGF5ZXIgdHJlZQot
SXRlcmF0aW9uIDI2OiBQYXNzZWQKLUl0ZXJhdGlvbiAyNiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9u
IDI3OiBQYXNzZWQKLUl0ZXJhdGlvbiAyNywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI4OiBQYXNz
ZWQKLUl0ZXJhdGlvbiAyOCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI5OiBQYXNzZWQKLUl0ZXJh
dGlvbiAyOSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDMwOiBQYXNzZWQKLUl0ZXJhdGlvbiAzMCwg
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDMxOiBQYXNzZWQKLUl0ZXJhdGlvbiAzMSwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDMyOiBQYXNzZWQKLUl0ZXJhdGlvbiAzMiwgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDMzOiBQYXNzZWQKLUl0ZXJhdGlvbiAzMywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM0OiBQ
YXNzZWQKLUl0ZXJhdGlvbiAzNCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM1OiBQYXNzZWQK
LUl0ZXJhdGlvbiAzNSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM2OiBQYXNzZWQKLUl0ZXJh
dGlvbiAzNiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM3OiBQYXNzZWQKLUl0ZXJhdGlvbiAzNywg
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM4OiBQYXNzZWQKLUl0ZXJhdGlvbiAzOCwgbm8gbGF5ZXIg
dHJlZQotSXRlcmF0aW9uIDM5OiBQYXNzZWQKLUl0ZXJhdGlvbiAzOSwgbm8gbGF5ZXIgdHJlZQot
SXRlcmF0aW9uIDQwOiBQYXNzZWQKLUl0ZXJhdGlvbiA0MCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9u
IDQxOiBQYXNzZWQKLUl0ZXJhdGlvbiA0MSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQyOiBQYXNz
ZWQKLUl0ZXJhdGlvbiA0MiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQzOiBQYXNzZWQKLUl0ZXJh
dGlvbiA0MywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ0OiBQYXNzZWQKLUl0ZXJhdGlvbiA0NCwg
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ1OiBQYXNzZWQKLUl0ZXJhdGlvbiA0NSwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDQ2OiBQYXNzZWQKLUl0ZXJhdGlvbiA0NiwgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDQ3OiBQYXNzZWQKLUl0ZXJhdGlvbiA0NywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ4OiBQ
YXNzZWQKLUl0ZXJhdGlvbiA0OCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ5OiBQYXNzZWQK
LUl0ZXJhdGlvbiA0OSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDUwOiBQYXNzZWQKLUl0ZXJh
dGlvbiA1MCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDUxOiBQYXNzZWQKLUl0ZXJhdGlvbiA1MSwg
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDUyOiBQYXNzZWQKLUl0ZXJhdGlvbiA1MiwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDUzOiBQYXNzZWQKLUl0ZXJhdGlvbiA1MywgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDU0OiBQYXNzZWQKLUl0ZXJhdGlvbiA1NCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU1
OiBQYXNzZWQKLUl0ZXJhdGlvbiA1NSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU2OiBQYXNz
ZWQKLUl0ZXJhdGlvbiA1Niwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU3OiBQYXNzZWQKLUl0
ZXJhdGlvbiA1Nywgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU4OiBQYXNzZWQKLUl0ZXJhdGlv
biA1OCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU5OiBQYXNzZWQKLUl0ZXJhdGlvbiA1OSwg
bm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDYwOiBQYXNzZWQKLUl0ZXJhdGlvbiA2MCwgbGF5ZXIg
dHJlZQotSXRlcmF0aW9uIDYxOiBQYXNzZWQKLUl0ZXJhdGlvbiA2MSwgbm8gbGF5ZXIgdHJlZQot
SXRlcmF0aW9uIDYyOiBQYXNzZWQKLUl0ZXJhdGlvbiA2MiwgbGF5ZXIgdHJlZQogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1p
bnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9v
dmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLmh0bWwK
aW5kZXggMWU2N2I1ZGQ3OGZiNzExYmJlMTRjMTY2MTg4MzJlNjExZGFmYWY0MC4uZTQ2MjlkYmNh
YzM2NjJlYWQwN2U2YjVjZTE4ZWMyMmUwN2JhZWRmZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNj
cm9sbGluZy5odG1sCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9t
YXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbApAQCAtMTIsMTIgKzEy
LDE0IEBACiAgICAgICBvdmVyZmxvdzogc2Nyb2xsOwogICAgICAgbWFyZ2luOiAyMHB4OwogICAg
ICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBG
RkZGOwogICAgIH0KIAogICAgIC5zY3JvbGxlZCB7CiAgICAgICB3aWR0aDogMTgwcHg7Ci0gICAg
ICBoZWlnaHQ6IDkwcHg7CisgICAgICBoZWlnaHQ6IDMwcHg7CiAgICAgICBtYXJnaW46IDEwcHg7
CisgICAgICB0b3A6IDcwcHg7CiAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OwogICAgICAg
cG9zaXRpb246IHJlbGF0aXZlOwogICAgIH0KQEAgLTI1LDI1ICsyNywzMiBAQAogICAgIC5wb3Np
dGlvbmVkIHsKICAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgIGhlaWdodDogMjQwcHg7Ci0gICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAg
ICB9CiAKKyAgICAjc2Vjb25kQ2hpbGQgeworICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0NDOTk5
OTsKKyAgICAgIHRvcDogNTBweDsKKyAgICB9CisKICAgICAjcHJlZGVjZXNzb3IgewogICAgICAg
bGVmdDogMjBweDsKICAgICAgIHRvcDogMjBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5
OTAwNjY7CiAgICAgfQogCiAgICAgI3N1Y2Nlc3NvciB7Ci0gICAgICBsZWZ0OiAxNjBweDsKKyAg
ICAgIGxlZnQ6IDIwcHg7CiAgICAgICB0b3A6IDIwcHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiAjMDAwMDY2OwogICAgIH0KIAotICAgICNkZXNjZW5kYW50IHsKLSAgICAgIGxlZnQ6IDkwcHg7
Ci0gICAgICB0b3A6IDIwcHg7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOwotICAgICAg
ei1pbmRleDogLTIwOworICAgICNub3JtYWxGbG93IHsKKyAgICAgIHdpZHRoOiAxODBweDsKKyAg
ICAgIGhlaWdodDogMzBweDsKKyAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgIHRvcDogLTIwcHg7
CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CiAgICAgfQogICA8L3N0eWxlPgogICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgpAQCAtNTIsOSAr
NjEsNiBAQAogICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOwogCi0gICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgICB3aW5kb3cuaW50
ZXJuYWxzLnNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9s
bEVuYWJsZWQodHJ1ZSk7Ci0KICAgICBmdW5jdGlvbiB3cml0ZShzdHIpCiAgICAgewogICAgICAg
dmFyIHByZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CkBAIC02MiwxNjkg
KzY4LDE5NCBAQAogICAgICAgcHJlLmFwcGVuZENoaWxkKHRleHQpOwogICAgIH0KIAotICAgIHZh
ciBpdGVyYXRpb24gPSAwOwotICAgIGZ1bmN0aW9uIHByaW50UmVzdWx0KGV4cGVjdGVkUmVzdWx0
KQorICAgIGZ1bmN0aW9uIGRpZE9wdEluKCkKKyAgICB7CisgICAgICAvLyBGb3JjZSBhIHN0eWxl
IHJlY2FsYy4KKyAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICAvLyBGb3Jj
ZSBhIGxheW91dC4KKyAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdCb3goY29udGFpbmVy
KTsKKyAgICAgIHZhciBsYXllclRyZWUgPSB3aW5kb3cuaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4
dChkb2N1bWVudCk7CisKKyAgICAgIGlmIChkZWJ1Z01vZGUpCisgICAgICAgICAgd3JpdGUobGF5
ZXJUcmVlKTsKKworICAgICAgcmV0dXJuICEhbGF5ZXJUcmVlOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGdldFN0YWNraW5nT3JkZXIoKQogICAgIHsKKyAgICAgIHZhciBkaXZFbGVtZW50cyA9IFtd
OwogICAgICAgLy8gRm9yY2UgYSBzdHlsZSByZWNhbGMuCiAgICAgICBkb2N1bWVudC5ib2R5Lm9m
ZnNldFRvcDsKIAotICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKLSAgICAgICAgLy8gRm9y
Y2UgYSBsYXlvdXQuCi0gICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdCb3goY29udGFp
bmVyKTsKLSAgICAgICAgdmFyIGxheWVyVHJlZSA9IHdpbmRvdy5pbnRlcm5hbHMubGF5ZXJUcmVl
QXNUZXh0KGRvY3VtZW50KTsKLQotICAgICAgICBpZiAoIWxheWVyVHJlZSA9PSAhZXhwZWN0ZWRS
ZXN1bHQpCi0gICAgICAgICAgd3JpdGUoJ0l0ZXJhdGlvbiAnICsgaXRlcmF0aW9uLnRvU3RyaW5n
KCkgKyAnOiBQYXNzZWQnKQotICAgICAgICBlbHNlCi0gICAgICAgICAgd3JpdGUoJ0l0ZXJhdGlv
biAnICsgaXRlcmF0aW9uLnRvU3RyaW5nKCkgKyAnOiBGQUlMRUQnKQotCi0gICAgICAgIGlmIChs
YXllclRyZWUpIHsKLSAgICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9T
dHJpbmcoKSArICcsIGxheWVyIHRyZWUnKTsKLSAgICAgICAgICBpZiAoZGVidWdNb2RlKQotICAg
ICAgICAgICAgICB3cml0ZShsYXllclRyZWUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICB3
cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJpbmcoKSArICcsIG5vIGxheWVyIHRy
ZWUnKTsKKyAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgd2luZG93LmludGVybmFscy5i
b3VuZGluZ0JveChjb250YWluZXIpOworCisgICAgICB2YXIgc3RhY2tpbmdPcmRlciA9IHdpbmRv
dy5pbnRlcm5hbHMubm9kZXNGcm9tUmVjdChkb2N1bWVudCwgMTAwLCA3NSwgMjAwLCAyMDAsIDIw
MCwgMjAwLCBmYWxzZSwgZmFsc2UpOworCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNr
aW5nT3JkZXIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0YWNraW5nT3JkZXJbaV0ubm9k
ZU5hbWUgPT09ICJESVYiKSB7CisgICAgICAgICAgZGl2RWxlbWVudHMucHVzaChzdGFja2luZ09y
ZGVyW2ldKTsKKyAgICAgICAgfQogICAgICAgfQotICAgICAgaXRlcmF0aW9uKys7CisKKyAgICAg
IHJldHVybiBkaXZFbGVtZW50czsKICAgICB9CiAKICAgICBmdW5jdGlvbiBkb1Rlc3QoKQogICAg
IHsKKyAgICAgIHZhciBhbmNlc3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmNlc3Rv
cicpOwogICAgICAgdmFyIHByZWRlY2Vzc29yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3By
ZWRlY2Vzc29yJyk7CiAgICAgICB2YXIgc3VjY2Vzc29yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3N1Y2Nlc3NvcicpOwogICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb250YWluZXInKTsKICAgICAgIHZhciBmaXJzdENoaWxkID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2ZpcnN0Q2hpbGQnKTsKICAgICAgIHZhciBzZWNvbmRDaGlsZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdzZWNvbmRDaGlsZCcpOwotICAgICAgdmFyIGRlc2NlbmRhbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVzY2VuZGFudCcpOwogICAgICAgdmFyIGNvdW50
ID0gMDsKIAotICAgICAgZGVzY2VuZGFudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotCi0gICAg
ICAvLyBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4KLSAgICAgIGZvciAoaSA9IDA7IGkg
PCAzOyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDU7ICsraikgewotICAgICAgICAg
IGZvciAoayA9IDA7IGsgPCAyOyArK2spIHsKLSAgICAgICAgICAgIGZvciAobCA9IDA7IGwgPCAy
OyArK2wpIHsKLSAgICAgICAgICAgICAgdmFyIG1pblpJbmRleCA9IDA7Ci0gICAgICAgICAgICAg
IHZhciBtYXhaSW5kZXggPSAwOwotICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgZmlyc3RDaGlsZC5zdHlsZS56SW5kZXggPSAnMSc7Ci0gICAgICAgICAgICAgICAg
c2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4ID0gJzMnOwotICAgICAgICAgICAgICAgIG1heFpJbmRl
eCA9IDM7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSAxKSB7Ci0gICAgICAgICAgICAg
ICAgZmlyc3RDaGlsZC5zdHlsZS56SW5kZXggPSAnLTEnOwotICAgICAgICAgICAgICAgIHNlY29u
ZENoaWxkLnN0eWxlLnpJbmRleCA9ICctMyc7Ci0gICAgICAgICAgICAgICAgbWluWkluZGV4ID0g
LTM7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RDaGlsZC5z
dHlsZS56SW5kZXggPSAnLTEnOwotICAgICAgICAgICAgICAgIHNlY29uZENoaWxkLnN0eWxlLnpJ
bmRleCA9ICczJzsKLSAgICAgICAgICAgICAgICBtaW5aSW5kZXggPSAtMTsKLSAgICAgICAgICAg
ICAgICBtYXhaSW5kZXggPSAzOwotICAgICAgICAgICAgICB9CisgICAgICBmb3IgKHZhciBzaWJs
aW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRlc0NvbnRhaW5lciA9IDA7IHNpYmxpbmdTaG91bGRCZVpl
cm9JZlByZWNlZGVzQ29udGFpbmVyIDw9IDE7ICsrc2libGluZ1Nob3VsZEJlWmVyb0lmUHJlY2Vk
ZXNDb250YWluZXIpIHsKKyAgICAgICAgZm9yICh2YXIgY29udGFpbmVySXNQb3NpdGlvbmVkID0g
MDsgY29udGFpbmVySXNQb3NpdGlvbmVkIDw9IDE7ICsrY29udGFpbmVySXNQb3NpdGlvbmVkKSB7
CisgICAgICAgICAgZm9yICh2YXIgc2libGluZ0lzU3VjY2Vzc29yID0gMDsgc2libGluZ0lzU3Vj
Y2Vzc29yIDw9IDE7ICsrc2libGluZ0lzU3VjY2Vzc29yKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBoYXNQb3NpdGlvbmVkQW5jZXN0b3IgPSAwOyBoYXNQb3NpdGlvbmVkQW5jZXN0b3IgPD0gMTsg
KytoYXNQb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgdmFyIGluZGljZXMgPSBb
IDAsIDEsIDIsIDMgXTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgc2libGluZ0luZGV4ID0gMDsg
c2libGluZ0luZGV4IDwgNDsgKytzaWJsaW5nSW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIg
c2libGluZ0luZGljZXMgPSBpbmRpY2VzLnNsaWNlKDApOworICAgICAgICAgICAgICAgIHNpYmxp
bmdJbmRpY2VzLnNwbGljZShzaWJsaW5nSW5kZXgsIDEpOworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGNvbnRhaW5lclN1YmluZGV4ID0gMDsgY29udGFpbmVyU3ViaW5kZXggPCAzOyArK2NvbnRh
aW5lclN1YmluZGV4KSB7CisgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVySW5kaWNlcyA9
IHNpYmxpbmdJbmRpY2VzLnNsaWNlKDApOworICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5l
ckluZGV4ID0gY29udGFpbmVySW5kaWNlc1tjb250YWluZXJTdWJpbmRleF07CisgICAgICAgICAg
ICAgICAgICBjb250YWluZXJJbmRpY2VzLnNwbGljZShjb250YWluZXJTdWJpbmRleCwgMSk7Cisg
ICAgICAgICAgICAgICAgICB2YXIgZmlyc3RDaGlsZEluZGV4ID0gY29udGFpbmVySW5kaWNlc1sw
XTsKKyAgICAgICAgICAgICAgICAgIHZhciBzZWNvbmRDaGlsZEluZGV4ID0gY29udGFpbmVySW5k
aWNlc1sxXTsKIAotICAgICAgICAgICAgICB2YXIgc2libGluZyA9IHByZWRlY2Vzc29yOwotICAg
ICAgICAgICAgICB2YXIgdG9IaWRlID0gc3VjY2Vzc29yOwotICAgICAgICAgICAgICBpZiAoayA9
PSAxKSB7Ci0gICAgICAgICAgICAgICAgc2libGluZyA9IHN1Y2Nlc3NvcjsKLSAgICAgICAgICAg
ICAgICB0b0hpZGUgPSBwcmVkZWNlc3NvcjsKLSAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgdmFyIHNpYmxpbmdQcmVjZWRlc0NvbnRhaW5lciA9IHNpYmxpbmdJbmRleCA9PSBjb250
YWluZXJJbmRleCAtIDE7CisgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZEluZGV4ID4g
c2Vjb25kQ2hpbGRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICAgIGlmIChjb250YWluZXJJc1Bvc2l0aW9uZWQgPT0gMSAmJiBoYXNQb3NpdGlv
bmVkQW5jZXN0b3IgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICAgIGlmIChzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRlc0NvbnRhaW5lciA9
PSAxICYmICFzaWJsaW5nUHJlY2VkZXNDb250YWluZXIpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgICB2YXIgb3JkZXJpbmcgPSBbIG51bGwsIG51bGws
IG51bGwsIG51bGwgXTsKKyAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW3NpYmxpbmdJbmRleF0g
PSBzaWJsaW5nSXNTdWNjZXNzb3IgPT0gMSA/IHN1Y2Nlc3NvciA6IHByZWRlY2Vzc29yOworICAg
ICAgICAgICAgICAgICAgb3JkZXJpbmdbY29udGFpbmVySW5kZXhdID0gaGFzUG9zaXRpb25lZEFu
Y2VzdG9yID09IDEgPyBhbmNlc3RvciA6IGNvbnRhaW5lcjsKKyAgICAgICAgICAgICAgICAgIG9y
ZGVyaW5nW2ZpcnN0Q2hpbGRJbmRleF0gPSBmaXJzdENoaWxkOworICAgICAgICAgICAgICAgICAg
b3JkZXJpbmdbc2Vjb25kQ2hpbGRJbmRleF0gPSBzZWNvbmRDaGlsZDsKKworICAgICAgICAgICAg
ICAgICAgdmFyIHNpYmxpbmcgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICAgIHZhciB0
b0hpZGUgPSBzdWNjZXNzb3I7CisgICAgICAgICAgICAgICAgICBpZiAoc2libGluZ0lzU3VjY2Vz
c29yID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgc2libGluZyA9IHN1Y2Nlc3NvcjsKKyAg
ICAgICAgICAgICAgICAgICAgdG9IaWRlID0gcHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgIHRvSGlkZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwor
ICAgICAgICAgICAgICAgICAgc2libGluZy5zdHlsZS5kaXNwbGF5ID0gJyc7CisKKyAgICAgICAg
ICAgICAgICAgIHZhciBwb3NpdGlvbmVkID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgIGlmIChj
b250YWluZXJJc1Bvc2l0aW9uZWQgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBjb250YWlu
ZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbmVkID0gY29udGFpbmVyOworICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICcnOwogCi0gICAgICAgICAgICAg
IC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIHRoZSBzYW1lIGlmIHRoZSB0aGUgZWxlbWVudCB0byBo
aWRlIGlzCi0gICAgICAgICAgICAgIC8vIGRpc3BsYXk6aGlkZGVuIG9yIGRpc3BsYXk6bm9uZS4K
LSAgICAgICAgICAgICAgaWYgKGwgPT0gMCkKLSAgICAgICAgICAgICAgICB0b0hpZGUuc3R5bGUu
ZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRv
SGlkZS5zdHlsZS5kaXNwbGF5ID0gJ2hpZGRlbic7Ci0KLSAgICAgICAgICAgICAgc2libGluZy5z
dHlsZS5kaXNwbGF5ID0gJyc7Ci0KLSAgICAgICAgICAgICAgaWYgKGogPT0gMCkKLSAgICAgICAg
ICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IChtYXhaSW5kZXggKyAxKS50b1N0cmluZygp
OwotICAgICAgICAgICAgICBlbHNlIGlmIChqID09IDEpCi0gICAgICAgICAgICAgICAgc2libGlu
Zy5zdHlsZS56SW5kZXggPSAobWluWkluZGV4IC0gMSkudG9TdHJpbmcoKTsKLSAgICAgICAgICAg
ICAgZWxzZSBpZiAoaiA9PSAyKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4
ID0gbWF4WkluZGV4LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGogPT0gMykK
LSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IG1pblpJbmRleC50b1N0cmlu
ZygpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2libGluZy5zdHlsZS56
SW5kZXggPSAoKG1pblpJbmRleCArIG1heFpJbmRleCkgLyAyKS50b1N0cmluZygpOwotCi0gICAg
ICAgICAgICAgIHZhciBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgIGlmIChz
aWJsaW5nLnN0eWxlLnpJbmRleCA+IG1heFpJbmRleCB8fAotICAgICAgICAgICAgICAgICAgc2li
bGluZy5zdHlsZS56SW5kZXggPCBtaW5aSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIC8vIHNp
YmxpbmcgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2Ygb3VyIGRlc2NlbmRhbnRzLgotICAgICAgICAg
ICAgICAgICAgYXJlQ29udGlndW91cyA9IHRydWU7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAo
c2libGluZy5zdHlsZS56SW5kZXggPCBtYXhaSW5kZXggJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA+IG1pblpJbmRleCkgewotICAgICAgICAgICAgICAg
ICAgLy8gc2libGluZyBpcyBiZXR3ZWVuIG91ciBkZXNjZW5kYW50cy4KLSAgICAgICAgICAgICAg
ICAgIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWJs
aW5nLnN0eWxlLnpJbmRleCA9PSBtaW5aSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIGlmICht
aW5aSW5kZXggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcgbGllcyBi
ZXR3ZWVuIHVzIChub3JtYWwgZmxvdykgYW5kIG91ciBwb3MKLSAgICAgICAgICAgICAgICAgICAg
ICAvLyB6LW9yZGVyIGRlc2NlbmRhbnRzLCBzbyB3ZSBhcmUgbm90IGNvbnRpZ3VvdXMuCi0gICAg
ICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nJ3MgekluZGV4IG1h
dGNoZXMgdGhlIG1pbjsgd2UncmUgb25seSBvayBpZiBpdAotICAgICAgICAgICAgICAgICAgICAg
IC8vIGFwcGVhcnMgZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9
IGsgPT0gMDsKKyAgICAgICAgICAgICAgICAgIGlmIChoYXNQb3NpdGlvbmVkQW5jZXN0b3IgPT0g
MSkgeworICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxh
dGl2ZSc7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSBhbmNlc3RvcjsKKyAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS5w
b3NpdGlvbiA9ICcnOworCisgICAgICAgICAgICAgICAgICAvLyBBc3NpZ24gei1pbmRpY2VzLgor
ICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAxIHx8IGhhc1Bv
c2l0aW9uZWRBbmNlc3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tjb250
YWluZXJJbmRleF0uc3R5bGUuekluZGV4ID0gJzAnOworICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSAnJzsKKyAgICAg
ICAgICAgICAgICAgICAgYW5jZXN0b3Iuc3R5bGUuekluZGV4ID0gJyc7CiAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2libGluZy5zdHlsZS56SW5kZXggPT0g
bWF4WkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAobWF4WkluZGV4IDwgMCkgewotICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcgbGllcyBiZXR3ZWVuIHVzIChub3JtYWwgZmxv
dykgYW5kIG5lZyB6LW9yZGVyCi0gICAgICAgICAgICAgICAgICAgICAgLy8gZGVzY2VuZGFudHMs
IHNvIHdlIGFyZSBub3QgY29udGlndW91cy4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250
aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1heFpJbmRleCA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBpcyBpbiB0aGUgcG9zIHot
b3JkZXIgbGlzdCBhbmQgZG9lcyBub3QgYWZmZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgLy8g
dXMgc2luY2Ugd2UncmUgaW4gdGhlIG5vcm1hbCBmbG93IGxpc3QgYW5kIG91cgotICAgICAgICAg
ICAgICAgICAgICAgIC8vIGRlc2NhbmRhbnRzIGFyZSBpbiB0aGUgbmVnIHotb3JkZXIgbGlzdC4K
LSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZydzIHpJbmRl
eCBtYXRjaGVzIHRoZSBtYXg7IHdlJ3JlIG9ubHkgb2sgaWYgaXQKLSAgICAgICAgICAgICAgICAg
ICAgICAvLyBhcHBlYXJzIGFmdGVyLgotICAgICAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3Vv
dXMgPSBrID09IDE7CisKKyAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50WkluZGV4ID0gc2li
bGluZ1ByZWNlZGVzQ29udGFpbmVyICYmIHNpYmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29u
dGFpbmVyID09IDEgPyAwIDogLTE7CisgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50
SW5kZXggPSBjb250YWluZXJJbmRleCAtIDE7IGN1cnJlbnRJbmRleCA+PSAwOyAtLWN1cnJlbnRJ
bmRleCkgeworICAgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tjdXJyZW50SW5kZXhdLnN0eWxl
LnpJbmRleCA9IGN1cnJlbnRaSW5kZXgudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFpJbmRleC0tOwogICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgcHJpbnRSZXN1bHQoYXJlQ29udGlndW91cyk7Ci0gICAgICAgICAgICB9
IC8vIGZvciBsCi0gICAgICAgICAgfSAvLyBmb3IgawotICAgICAgICB9IC8vIGZvciBqCi0gICAg
ICB9IC8vIGZvciBpCi0KLSAgICAgIC8vIE5vdyBjaGVjayB0aGF0IHdlIGRvbid0IHByb21vdGUg
aWYgd2UgaGF2ZSBhbiBvdXQgb2YgZmxvdyBkZXNjZW5kYW50LgotICAgICAgLy8gV2UgbmVlZCB0
byBoaWRlIHRoZSBwcmVkZWNlc3NvciBhbmQgc3VjY2Vzc29yIHNvIHRoZXkgZG9uJ3QgaW50ZXJm
ZXJlCi0gICAgICAvLyB3aXRoIHRoaXMgZXhwZXJpbWVudC4KLSAgICAgIHByZWRlY2Vzc29yLnN0
eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgICBzdWNjZXNzb3Iuc3R5bGUuZGlzcGxheSA9ICdu
b25lJzsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgaWYgKGkgPT0g
MCkKLSAgICAgICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAnaGlkZGVuJzsKLSAgICAg
ICAgZWxzZSBpZiAoaSA9PSAxKQotICAgICAgICAgIGRlc2NlbmRhbnQuc3R5bGUuZGlzcGxheSA9
ICcnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZGVzY2VuZGFudC5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOwotCi0gICAgICAgIC8vIElmIHRoZSBvdXQgb2YgZmxvdyBwb3NpdGlvbmVkIGRlc2Nl
bmRhbnQgaXMgdmlzaWJsZSwgd2UgY2Fubm90IG9wdAotICAgICAgICAvLyBpbnRvIGNvbXBvc2l0
ZWQgc2Nyb2xsaW5nLgotICAgICAgICBwcmludFJlc3VsdChpICE9IDEpOwotICAgICAgICBjb3Vu
dCsrOwotICAgICAgfSAvLyBmb3IgaQorICAgICAgICAgICAgICAgICAgY3VycmVudFpJbmRleCA9
IDE7CisgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50SW5kZXggPSBjb250YWluZXJJ
bmRleCArIDE7IGN1cnJlbnRJbmRleCA8IDQ7ICsrY3VycmVudEluZGV4KSB7CisgICAgICAgICAg
ICAgICAgICAgIG9yZGVyaW5nW2N1cnJlbnRJbmRleF0uc3R5bGUuekluZGV4ID0gY3VycmVudFpJ
bmRleC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50WkluZGV4Kys7Cisg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJu
YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGJlbG93LCB3aGVuIHdlIHNldCB3ZWJraXRU
cmFuc2Zvcm0gdG8gJycsIHdlIHdhbnQgdGhhdCB0byBmb3JjZSBhIHN0eWxlIHJlY2FsY3VsYXRp
b24uCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2luZyB0aGlzIG5vdCAnJyBoZXJlIHdpbGwg
Zm9yY2UgdGhpcyByZWNhbGN1bGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBjb250YWluZXIu
c3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVooMHB4KSc7CisgICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICAgICAgICAgICAgICAgIC8v
IGZvcmNlIHRvIG5vdCBwcm9tb3RlLgorICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50ZXJu
YWxzLnNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVu
YWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0
VHJhbnNmb3JtID0gJyc7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9sZFN0YWNraW5nT3Jk
ZXIgPSBnZXRTdGFja2luZ09yZGVyKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yY2Ug
dG8gcHJvbW90ZS4KKyAgICAgICAgICAgICAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5n
cy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKHRydWUp
OworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0g
J3RyYW5zbGF0ZVooMHB4KSc7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1N0YWNraW5n
T3JkZXIgPSBnZXRTdGFja2luZ09yZGVyKCk7CiAKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNo
b3VsZE9wdEluID0gb2xkU3RhY2tpbmdPcmRlci5sZW5ndGggPT0gbmV3U3RhY2tpbmdPcmRlci5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkU3RhY2tp
bmdPcmRlci5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRTdGFj
a2luZ09yZGVyW2ldICE9IG5ld1N0YWNraW5nT3JkZXJbaV0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNob3VsZE9wdEluID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJyc7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRPcHRJbiAhPSBkaWRPcHRJbigpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE9wdEluKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZSgiRkFJTCAtIHNob3VsZCd2ZSBhdXRvbWF0aWNhbGx5IG9wdGVkIGluIGJ1dCBk
aWRuJ3QgIiArIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGUoJ0ZBSUwgLSBhdXRvbWF0aWNhbGx5IG9wdGVkIGluIGFu
ZCBjaGFuZ2VkIHN0YWNraW5nIG9yZGVyICcgKyBjb3VudCk7CisgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7
CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CiAgICAgfSAv
LyBmdW5jdGlvbiBkb1Rlc3QKIAorICAgIGZ1bmN0aW9uIHRvZ2dsZSgpIHsKKyAgICAgIHZhciBj
b250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7CisgICAgICBj
b250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gY29udGFpbmVyLnN0eWxlLndlYmtpdFRy
YW5zZm9ybSA/ICcnIDogJ3RyYW5zbGF0ZVooMHB4KSc7CisKKyAgICAgIC8vIEZvcmNlIGEgc3R5
bGUgcmVjYWxjLgorICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIC8vIEZv
cmNlIGEgbGF5b3V0LgorICAgICAgd2luZG93LmludGVybmFscy5ib3VuZGluZ0JveChjb250YWlu
ZXIpOworICAgIH0KKwogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0
LCBmYWxzZSk7CiAgIDwvc2NyaXB0PgogPC9oZWFkPgogCiA8Ym9keT4KLSAgPGRpdiBjbGFzcz0i
cG9zaXRpb25lZCIgaWQ9InByZWRlY2Vzc29yIj48L2Rpdj4KLSAgPGRpdiBjbGFzcz0iY29udGFp
bmVyIiBpZD0iY29udGFpbmVyIj4KLSAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIgaWQ9ImZpcnN0
Q2hpbGQiPjwvZGl2PgotICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0ic2Vjb25kQ2hpbGQi
PjwvZGl2PgotICAgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJkZXNjZW5kYW50Ij48L2Rp
dj4KKyAgPGRpdiBpZD0iYW5jZXN0b3IiPgorICAgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlk
PSJwcmVkZWNlc3NvciI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBpZD0iY29u
dGFpbmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0iZmlyc3RDaGlsZCI+PC9k
aXY+CisgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIgaWQ9InNlY29uZENoaWxkIj48L2Rpdj4K
KyAgICAgIDxkaXYgaWQ9Im5vcm1hbEZsb3ciPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYg
Y2xhc3M9InBvc2l0aW9uZWQiIGlkPSJzdWNjZXNzb3IiPjwvZGl2PgogICA8L2Rpdj4KLSAgPGRp
diBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InN1Y2Nlc3NvciI+PC9kaXY+CiAgIDxwcmUgaWQ9ImNv
bnNvbGUiPjwvcHJlPgogPC9ib2R5PgogPC9odG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9jb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3Np
dGlvbmVkLWFuY2VzdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292
ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3It
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4YzEwZGJhMWY4YWJhY2E0ZGYyOTEzMTlhZjJlMmNi
NzY3YTY5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVy
Zmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1Bhc3NlZCAtIGxheWVyIHRyZWUuCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0
ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBv
c2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQt
YW5jZXN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDIwNWFlOWRhYzU1NDBhOThlMGJiZGQ1MDI4OGQz
NjQ3ZDNjMDUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3Zl
cmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5o
dG1sCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFRE
IEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0
bWw0L2xvb3NlLmR0ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8bWV0YSBodHRw
LWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIv
PgorICA8dGl0bGU+T3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmc8L3RpdGxlPgorICA8
c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIC5jb250YWluZXIgewor
ICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICAgIG92ZXJmbG93
OiBzY3JvbGw7CisgICAgICBtYXJnaW46IDIwcHg7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCBi
bGFjazsKKyAgICB9CisKKyAgICAuc2Nyb2xsZWQgeworICAgICAgd2lkdGg6IDE4MHB4OworICAg
ICAgaGVpZ2h0OiA5MHB4OworICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgYmFja2dyb3VuZC1j
b2xvcjogZ3JheTsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB9CisKKyAgICAucG9z
aXRpb25lZCB7CisgICAgICB3aWR0aDogMTIwcHg7CisgICAgICBoZWlnaHQ6IDI0MHB4OworICAg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIH0KKworICAgICNmaXJzdENoaWxkIHsKKyAgICAg
IHotaW5kZXg6IDE7CisgICAgfQorCisgICAgI3NlY29uZENoaWxkIHsKKyAgICAgIHotaW5kZXg6
IDI7CisgICAgfQorCisgICAgI3ByZWRlY2Vzc29yIHsKKyAgICAgIGxlZnQ6IDIwcHg7CisgICAg
ICB0b3A6IDIwcHg7CisgICAgICB6LWluZGV4OiAwOworICAgICAgYmFja2dyb3VuZC1jb2xvcjog
Z3JlZW47CisgICAgfQorCisgICAgI2FuY2VzdG9yIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6
IGJsdWU7CisgICAgfQorCisgIDwvc3R5bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgdmFyIGRlYnVnTW9kZSA9IGZhbHNlOworCisgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisK
KyAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGlu
Z3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCh0cnVl
KTsKKworICAgIGZ1bmN0aW9uIHdyaXRlKHN0cikKKyAgICB7CisgICAgICB2YXIgcHJlID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICAgIHZhciB0ZXh0ID0gZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoc3RyICsgJ1xuJyk7CisgICAgICBwcmUuYXBwZW5kQ2hpbGQodGV4
dCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAgICB2YXIgcHJl
ZGVjZXNzb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlZGVjZXNzb3InKTsKKyAgICAg
IHZhciBhbmNlc3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmNlc3RvcicpOworICAg
ICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsK
KyAgICAgIHZhciBmaXJzdENoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0Q2hp
bGQnKTsKKyAgICAgIHZhciBzZWNvbmRDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
ZWNvbmRDaGlsZCcpOworCisgICAgICAvLyBGb3JjZSBhIHN0eWxlIHJlY2FsYy4KKyAgICAgIGRv
Y3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICBpZiAod2luZG93LmludGVybmFscykgewor
ICAgICAgICAvLyBGb3JjZSBhIGxheW91dC4KKyAgICAgICAgd2luZG93LmludGVybmFscy5ib3Vu
ZGluZ0JveChjb250YWluZXIpOworICAgICAgICB2YXIgbGF5ZXJUcmVlID0gd2luZG93LmludGVy
bmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQpOworCisgICAgICAgIGlmICghbGF5ZXJUcmVl
KQorICAgICAgICAgIHdyaXRlKCdGQUlMRUQgLSBubyBsYXllciB0cmVlLicpCisgICAgICAgIGVs
c2UKKyAgICAgICAgICB3cml0ZSgnUGFzc2VkIC0gbGF5ZXIgdHJlZS4nKQorCisgICAgICAgIGlm
IChsYXllclRyZWUgJiYgZGVidWdNb2RlKQorICAgICAgICAgICAgd3JpdGUobGF5ZXJUcmVlKTsK
KyAgICAgIH0KKyAgICB9IC8vIGZ1bmN0aW9uIGRvVGVzdAorCisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+CisK
Kzxib2R5PgorICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0icHJlZGVjZXNzb3IiPjwvZGl2
PgorICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0iYW5jZXN0b3IiPgorICAgIDxkaXYgY2xh
c3M9ImNvbnRhaW5lciIgaWQ9ImNvbnRhaW5lciI+CisgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGxl
ZCIgaWQ9ImZpcnN0Q2hpbGQiPjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlk
PSJzZWNvbmRDaGlsZCI+PC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorICA8cHJlIGlkPSJj
b25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGFlODNhOTE4YThmYzQ3OGEyODhmZTY2
ODQ0MDU4YTcwNTQ3ZmY5YjcuLjI1ZTk4NWY3MTM2MjRmYWEwYTEyYmQ4YjE0MDllYWU1MjgxNWIx
NjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwpAQCAtMzY3Niw2ICszNjc2LDEzIEBAIHdlYmtpdC5vcmcvYi8xMDMxNTYgcGxhdGZvcm0vY2hy
b21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9zY3JvbGxiYXJzCiAjIFJlcXVp
cmVzIGFuIHVwZGF0ZWQgYmFzZWxpbmUgYWZ0ZXIgMTA2MTQyLgogd2Via2l0Lm9yZy9iLzEwNjgy
MCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9jb21wb3NpdGVkc2Nyb2xsaW5nL292ZXJm
bG93L292ZXJmbG93LXNjcm9sbC5odG1sIFsgRmFpbHVyZSBdCiAKKyMgTmVlZHMgcmViYXNlbGlu
ZSBhZnRlciAxMDkzMDIuCit3ZWJraXQub3JnL2IvMTA5OTY1IHBsYXRmb3JtL2Nocm9taXVtL3Zp
cnR1YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcvb3ZlcmZsb3cvdGV4dGFyZWEtc2Nyb2xsLXRv
dWNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xMDk5NjUgcGxhdGZvcm0vY2hyb21p
dW0vdmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nL292ZXJmbG93L3RleHRhcmVhLXNjcm9sbC10
b3VjaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTA5OTY1IHBsYXRmb3JtL2Nocm9t
aXVtL3ZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcvc2Nyb2xsYmFycy9vdmVyZmxvdy1z
Y3JvbGxiYXItY29tYmluYXRpb25zLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xMDk5
NjUgY29tcG9zaXRpbmcvb3ZlcmZsb3cvdGV4dGFyZWEtc2Nyb2xsLXRvdWNoLmh0bWwgWyBGYWls
dXJlIF0KKworCiAjIEZhaWxzIGR1ZSB0byBCdWcgODU4NTYuCiB3ZWJraXQub3JnL2IvODU4NTYg
WyBXaW4gTWFjIEFuZHJvaWQgXSBmYXN0L2Jsb2NrL2Zsb2F0LzAyOC5odG1sIFsgSW1hZ2VPbmx5
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODU4NTYgWyBXaW4gTWFjIEFuZHJvaWQgXSBmYXN0L2Js
b2NrL2Zsb2F0LzAyNi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190587</attachid>
            <date>2013-02-27 13:18:12 -0800</date>
            <delta_ts>2013-02-28 11:16:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130227161425.patch</filename>
            <type>text/plain</type>
            <size>47986</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTBkNmRhYWU2MWNiNjY3
MmE0NzhiNWRkYTZmZTVlOTgwZjBjNzE1My4uMzczZTkyY2UyZjY2YzIwODA2MDM4MDAyMGE3Zjk5
ZDMwNTM3NDRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTI3ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIHNob3VsZCBiZSBtb3Jl
IGludHVpdGl2ZSBhbmQgbW9yZQorICAgICAgICByb2J1c3QgdGhhbiB0aGUgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKworICAgICAgICBUZXN0OiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50
by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWwKKyAgICAgICAg
VGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3Np
dGVkLXNjcm9sbGluZy5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzUG9zaXRpb25lZENvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkNoaWxkcmVuQmVTdGFja2luZ0NvbnRh
aW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250
YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUlzTm9ybWFsRmxv
d09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJMaXN0c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVT
dGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aDoKKyAgICAgICAgKFJlbmRlckxheWVyKToKKwogMjAxMy0wMi0yNSAgQWxleGlzIE1lbmFyZCAg
PGFsZXhpc0B3ZWJraXQub3JnPgogCiAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHkgcHJvcGVy
dHkgZG9lc24ndCBhY2NlcHQgImFsbCwgPElERU5UPiIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCBlNGNhNjA5NjI1ZDYzOGYzNDcwODA3YTg5YjIxNWUxMjk1
OWJmZjZlLi4wMDYwYjkwZTVjMGQwM2Q2NjhkMTc0YzExMTljYjc5ZTllMTQ1YzM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE1Miw3ICsxNTIsNyBAQCBS
ZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVuZGVyZXIp
CiAgICAgLCBtX2hhc091dE9mRmxvd1Bvc2l0aW9uZWREZXNjZW5kYW50KGZhbHNlKQogICAgICwg
bV9oYXNPdXRPZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudERpcnR5KHRydWUpCiAgICAgLCBtX25l
ZWRzQ29tcG9zaXRlZFNjcm9sbGluZyhmYWxzZSkKLSAgICAsIG1fZGVzY2VuZGFudHNBcmVDb250
aWd1b3VzSW5TdGFja2luZ09yZGVyKGZhbHNlKQorICAgICwgbV9jYW5CZVByb21vdGVkVG9TdGFj
a2luZ2NvbnRhaW5lcihmYWxzZSkKICAgICAsIG1faXNSb290TGF5ZXIocmVuZGVyZXItPmlzUmVu
ZGVyVmlldygpKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9wYWlu
dGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCkBAIC01MjgsMTYzICs1MjgsMTgyIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJs
ZWQoKSBjb25zdAogICAgICAgICAmJiByZW5kZXJlcigpLT5mcmFtZSgpLT5wYWdlKCktPnNldHRp
bmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKTsK
IH0KIAotLy8gSWYgd2UgYXJlIGEgc3RhY2tpbmcgY29udGFpbmVyLCB0aGVuIHRoaXMgZnVuY3Rp
b24gd2lsbCBkZXRlcm1pbmUgaWYgb3VyCi0vLyBkZXNjZW5kYW50cyBmb3IgYSBjb250aWd1b3Vz
IGJsb2NrIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIGlzIHJlcXVpcmVkIGluCi0vLyBvcmRlciBm
b3IgYW4gZWxlbWVudCB0byBiZSBzYWZlbHkgcHJvbW90ZWQgdG8gYSBzdGFja2luZyBjb250YWlu
ZXIuIEl0IGlzIHNhZmUKLS8vIHRvIGJlY29tZSBhIHN0YWNraW5nIGNvbnRhaW5lciBpZiB0aGlz
IGNoYW5nZSB3b3VsZCBub3QgYWx0ZXIgdGhlIHN0YWNraW5nCi0vLyBvcmRlciBvZiBsYXllcnMg
b24gdGhlIHBhZ2UuIFRoYXQgY2FuIG9ubHkgaGFwcGVuIGlmIGEgbm9uLWRlc2NlbmRhbnQgYXBw
ZWFyCi0vLyBiZXR3ZWVuIHVzIGFuZCBvdXIgZGVzY2VuZGFudHMgaW4gc3RhY2tpbmcgb3JkZXIu
IEhlcmUncyBhbiBleGFtcGxlOgotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gIHwgIFwuCi0vLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBICAgQiAgIEMKLS8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgL1wgICB8ICAgL1wuCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCAtOCAgRCAgMiAgNwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
LS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0vLwotLy8gSSd2ZSBsYWJl
bGVkIG91ciBub3JtYWwgZmxvdyBkZXNjZW5kYW50cyBBLCBCLCBDLCBhbmQgRCwgb3VyIHN0YWNr
aW5nCi0vLyBjb250YWluZXIgZGVzY2VuZGFudHMgd2l0aCB0aGVpciB6IGluZGljZXMsIGFuZCB1
cyB3aXRoICd0aGlzJyAod2UncmUgYQotLy8gc3RhY2tpbmcgY29udGFpbmVyIGFuZCBvdXIgeklu
ZGV4IGRvZXNuJ3QgbWF0dGVyIGhlcmUpLiBUaGVzZSBub2RlcyBhcHBlYXIgaW4KLS8vIHRocmVl
IGxpc3RzOiBwb3NaT3JkZXIsIG5lZ1pPcmRlciwgYW5kIG5vcm1hbCBmbG93IChrZWVwIGluIG1p
bmQgdGhhdCBub3JtYWwKLS8vIGZsb3cgbGF5ZXJzIGRvbid0IG92ZXJsYXApLiBTbyBpZiB3ZSBh
cnJhbmdlIHRoZXNlIGxpc3RzIGluIG9yZGVyIHdlIGdldCBvdXIKLS8vIHN0YWNraW5nIG9yZGVy
OgotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgWy04XSwgW0EtRF0sIFswLCAyLCA1LCA3XS0t
PiBwb3Mgei1vcmRlci4KLS8vICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8Ci0vLyAgICAg
ICAgTmVnIHotb3JkZXIuIDwtKyAgICAgKy0tPiBOb3JtYWwgZmxvdyBkZXNjZW5kYW50cy4KLS8v
Ci0vLyBXZSBjYW4gdGhlbiBhc3NpZ24gbmV3LCAnc3RhY2tpbmcnIG9yZGVyIGluZGljZXMgdG8g
dGhlc2UgZWxlbWVudHMgYXMgZm9sbG93czoKLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgIFst
OF0sIFtBLURdLCBbMCwgMiwgNSwgN10KLS8vICdTdGFja2luZycgaW5kaWNlczogIC0xICAgICAw
ICAgICAxICAyICAzICA0Ci0vLwotLy8gTm90ZSB0aGF0IHRoZSBub3JtYWwgZmxvdyBkZXNjZW5k
YW50cyBjYW4gc2hhcmUgYW4gaW5kZXggYmVjYXVzZSB0aGV5IGRvbid0Ci0vLyBzdGFjay9vdmVy
bGFwLiBOb3cgb3VyIHByb2JsZW0gYmVjb21lcyB2ZXJ5IHNpbXBsZTogYSBsYXllciBjYW4gc2Fm
ZWx5IGJlY29tZQotLy8gYSBzdGFja2luZyBjb250YWluZXIgaWYgdGhlIHN0YWNraW5nLW9yZGVy
IGluZGljZXMgb2YgaXQgYW5kIGl0cyBkZXNjZW5kYW50cwotLy8gYXBwZWFyIGluIGEgY29udGln
dW91cyBibG9jayBpbiB0aGUgbGlzdCBvZiBzdGFja2luZyBpbmRpY2VzLiBUaGlzIHByb2JsZW0K
LS8vIGNhbiBiZSBzb2x2ZWQgdmVyeSBlZmZpY2llbnRseSBieSBjYWxjdWxhdGluZyB0aGUgbWlu
L21heCBzdGFja2luZyBpbmRpY2VzIGluCi0vLyB0aGUgc3VidHJlZSwgYW5kIHRoZSBudW1iZXIg
c3RhY2tpbmcgY29udGFpbmVyIGRlc2NlbmRhbnRzLiBPbmNlIHdlIGhhdmUgdGhpcwotLy8gaW5m
b3JtYXRpb24sIHdlIGtub3cgdGhhdCB0aGUgc3VidHJlZSdzIGluZGljZXMgZm9ybSBhIGNvbnRp
Z3VvdXMgYmxvY2sgaWY6Ci0vLwotLy8gICAgICAgICAgIG1heFN0YWNrSW5kZXggLSBtaW5TdGFj
a0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMKLS8vCi0vLyBTbyBmb3Igbm9kZSBBIGluIHRoZSBl
eGFtcGxlIGFib3ZlIHdlIHdvdWxkIGhhdmU6Ci0vLyAgIG1heFN0YWNrSW5kZXggPSAxCi0vLyAg
IG1pblN0YWNrSW5kZXggPSAtMQotLy8gICBudW1TQ0RlY2VuZGFudHMgPSAyCi0vLwotLy8gYW5k
IHNvLAotLy8gICAgICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNj
ZW5kYW50cwotLy8gID09PT4gICAgICAgICAgICAgICAgICAgICAgMSAtICgtMSkgPT0gMgotLy8g
ID09PT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT0gMgotLy8KLS8vICBTaW5jZSB0
aGlzIGlzIHRydWUsIEEgY2FuIHNhZmVseSBiZWNvbWUgYSBzdGFja2luZyBjb250YWluZXIuCi0v
LyAgTm93LCBmb3Igbm9kZSBDIHdlIGhhdmU6Ci0vLwotLy8gICBtYXhTdGFja0luZGV4ID0gNAot
Ly8gICBtaW5TdGFja0luZGV4ID0gMCA8LS0gYmVjYXVzZSBDIGhhcyBzdGFja2luZyBpbmRleCAw
LgotLy8gICBudW1TQ0RlY2VuZGFudHMgPSAyCi0vLwotLy8gYW5kIHNvLAotLy8gICAgICAgbWF4
U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50cwotLy8gID09PT4g
ICAgICAgICAgICAgICAgICAgICAgICAgNCAtIDAgPT0gMgotLy8gID09PT4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDQgPT0gMgotLy8KLS8vIFNpbmNlIHRoaXMgaXMgZmFsc2UsIEMgY2Fu
bm90IGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhpcwotLy8g
aGFwcGVuZWQgYmVjYXVzZSBvZiB0aGUgZWxlbWVudHMgd2l0aCB6LWluZGV4IDUgYW5kIDAuIE5v
dyBpZiA1IGhhZCBiZWVuIGEKLS8vIGNoaWxkIG9mIEMgcmF0aGVyIHRoYW4gRCwgYW5kIEEgaGFk
IG5vIGNoaWxkIHdpdGggWiBpbmRleCAwLCB3ZSB3b3VsZCBoYXZlIGhhZDoKLS8vCi0vLyAgIG1h
eFN0YWNrSW5kZXggPSAzCi0vLyAgIG1pblN0YWNrSW5kZXggPSAwIDwtLSBiZWNhdXNlIEMgaGFz
IHN0YWNraW5nIGluZGV4IDAuCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9IDMKLS8vCi0vLyBhbmQg
c28sCi0vLyAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rlc2Nl
bmRhbnRzCi0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gMCA9PSAzCi0vLyAg
PT09PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSAzCi0vLwotLy8gIEFuZCB3ZSB3
b3VsZCBjb25jbHVkZSB0aGF0IEMgY291bGQgYmUgcHJvbW90ZWQuCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKQotewotICAg
IGlmICghaXNTdGFja2luZ0NvbnRleHQoKSB8fCAhYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92
ZXJmbG93U2Nyb2xsRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1f
bm9ybWFsRmxvd0xpc3REaXJ0eSk7Ci0gICAgQVNTRVJUKCFtX3pPcmRlckxpc3RzRGlydHkpOwor
c3RhdGljIGlubGluZSBib29sIGlzUG9zaXRpb25lZENvbnRhaW5lcihjb25zdCBSZW5kZXJMYXll
ciogbGF5ZXIpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5ZXJSZW5kZXJlciA9
IGxheWVyLT5yZW5kZXJlcigpOworICAgIHJldHVybiBsYXllci0+aXNSb290TGF5ZXIoKSB8fCBs
YXllclJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+aGFzVHJhbnNmb3JtKCk7Cit9
CiAKLSAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0OwotICAg
IE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pPcmRlckxpc3Q7Ci0gICAgcmVidWls
ZFpPcmRlckxpc3RzKFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIHBvc1pPcmRlckxpc3QsIG5lZ1pP
cmRlckxpc3QpOworLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB1cGRhdGVDYW5CZVN0YWNraW5nQ29u
dGFpbmVyIHRvIHNpbXBsaWZ5IGluZGV4aW5nIGludG8KKy8vIHRoZSBwb3NpdGl2ZSBhbmQgbmVn
YXRpdmUgei1vcmRlciBsaXN0cywgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGVtIGJvdGgKKy8v
IGZyb20gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdC4KK3N0YXRpYyBjb25zdCBSZW5k
ZXJMYXllciogZ2V0U3RhY2tpbmdPcmRlckVsZW1lbnRBdChjb25zdCBWZWN0b3I8UmVuZGVyTGF5
ZXIqPiogcG9zWk9yZGVyTGlzdCwgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRl
ckxpc3QsIGNvbnN0IGJvb2wgZnJvbUxlZnQsIGNvbnN0IHNpemVfdCBpbmRleCkKK3sKKyAgICBz
aXplX3QgbmVnWk9yZGVyTGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0ID8gbmVnWk9yZGVyTGlzdC0+
c2l6ZSgpIDogMDsKIAotICAgIC8vIENyZWF0ZSBhIHJldmVyc2UgbG9va3VwLgotICAgIEhhc2hN
YXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBpbnQ+IGxvb2t1cDsKKyAgICBpZiAoZnJvbUxlZnQpIHsK
KyAgICAgICAgaWYgKGluZGV4IDwgbmVnWk9yZGVyTGlzdFNpemUpCisgICAgICAgICAgICByZXR1
cm4gbmVnWk9yZGVyTGlzdC0+YXQoaW5kZXgpOwogCi0gICAgaWYgKG5lZ1pPcmRlckxpc3QpIHsK
LSAgICAgICAgaW50IHN0YWNraW5nT3JkZXJJbmRleCA9IC0xOwotICAgICAgICBzaXplX3QgbGlz
dFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1cnJlbnRM
YXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGxpc3RTaXplIC0gaSAtIDEpOwotICAgICAgICAgICAg
aWYgKCFjdXJyZW50TGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBsb29rdXAuc2V0KGN1cnJlbnRMYXllciwgc3RhY2tpbmdP
cmRlckluZGV4LS0pOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBwb3NaT3JkZXJMaXN0LT5h
dChpbmRleCAtIG5lZ1pPcmRlckxpc3RTaXplKTsKICAgICB9CiAKLSAgICBpZiAocG9zWk9yZGVy
TGlzdCkgewotICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7
Ci0gICAgICAgIGludCBzdGFja2luZ09yZGVySW5kZXggPSAxOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAgIFJlbmRlckxheWVyKiBj
dXJyZW50TGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGlmICghY3Vy
cmVudExheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgbG9va3VwLnNldChjdXJyZW50TGF5ZXIsIHN0YWNraW5nT3JkZXJJbmRl
eCsrKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBzaXplX3QgcG9zWk9yZGVyTGlzdFNpemUgPSBw
b3NaT3JkZXJMaXN0ID8gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpIDogMDsKIAotICAgIGludCBtaW5J
bmRleCA9IDA7Ci0gICAgaW50IG1heEluZGV4ID0gMDsKLSAgICBpbnQgY291bnQgPSAwOwotICAg
IGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotICAgIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29u
dGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShsb29rdXAsIG1pbkluZGV4LCBtYXhJbmRl
eCwgY291bnQsIGZpcnN0SXRlcmF0aW9uKTsKKyAgICBpZiAoaW5kZXggPCBwb3NaT3JkZXJMaXN0
U2l6ZSkKKyAgICAgICAgcmV0dXJuIHBvc1pPcmRlckxpc3QtPmF0KHBvc1pPcmRlckxpc3RTaXpl
IC0gaW5kZXggLSAxKTsKKworICAgIHJldHVybiBuZWdaT3JkZXJMaXN0LT5hdChuZWdaT3JkZXJM
aXN0U2l6ZSAtIChwb3NaT3JkZXJMaXN0U2l6ZSAtIGluZGV4KSAtIDEpOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJS
ZWN1cnNpdmUoY29uc3QgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIGludD4mIGxvb2t1cCwg
aW50JiBtaW5JbmRleCwgaW50JiBtYXhJbmRleCwgaW50JiBjb3VudCwgYm9vbCBmaXJzdEl0ZXJh
dGlvbikKKy8vIERldGVybWluZSB3aGV0aGVyIHRoZSBjdXJyZW50IGxheWVyIGNhbiBiZSBwcm9t
b3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lciwKKy8vIGdpdmVuIGl0cyBjbG9zZXN0IHN0YWNr
aW5nIGNvbnRleHQgYW5jZXN0b3IuIFdlIGRvIHRoaXMgYnkgY29tcHV0aW5nIHdoYXQKKy8vIHBv
c2l0aXZlIGFuZCBuZWdhdGl2ZSB6LW9yZGVyIGxpc3RzIHdvdWxkIGxvb2sgbGlrZSBiZWZvcmUg
YW5kIGFmdGVyCisvLyBwcm9tb3Rpb24sIGFuZCBlbnN1cmluZyB0aGF0IHByb3BlciBzdGFja2lu
ZyBvcmRlciBpcyBwcmVzZXJ2ZWQgYmV0d2VlbiB0aGUKKy8vIHR3byBzZXRzIG9mIGxpc3RzLgor
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcihSZW5kZXJMYXll
ciogYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpCiB7Ci0gICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0
KCkgJiYgIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAgIGlmIChsb29rdXAuY29udGFpbnModGhp
cykpIHsKLSAgICAgICAgICAgIG1pbkluZGV4ID0gc3RkOjptaW4obWluSW5kZXgsIGxvb2t1cC5n
ZXQodGhpcykpOwotICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgbG9v
a3VwLmdldCh0aGlzKSk7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9CisgICAgaWYg
KGlzU3RhY2tpbmdDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBX
ZSBjYW4gZWFybHktb3V0IG9mIHRoaXMgZnVuY3Rpb24gbW9yZQorICAgIC8vIG9mdGVuIGlmIHdl
IG1haW50YWluIGEgZGlydHkgYml0IGZvciB0aGUKKyAgICAvLyBtX2NhbkJlUHJvbW90ZWRUb1N0
YWNraW5nY29udGFpbmVyIHByb3BlcnR5CisgICAgLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDk5NjYpCisKKyAgICB1cGRhdGVOb3JtYWxGbG93TGlzdCgpOwor
CisgICAgQVNTRVJUKCFtX25vcm1hbEZsb3dMaXN0RGlydHkpOworCisgICAgT3duUHRyPFZlY3Rv
cjxSZW5kZXJMYXllcio+ID4gcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGU7CisgICAgT3duUHRy
PFZlY3RvcjxSZW5kZXJMYXllcio+ID4gbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGU7CisgICAg
T3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4gcG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZTsK
KyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9t
b3RlOworCisgICAgLy8gV2UgY2FuJ3QgdXNlIFRlbXBvcmFyeUNoYW5nZTw+IGhlcmUgc2luY2Ug
bV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgYW5kCisgICAgLy8gbV9pc05vcm1hbEZsb3dPbmx5
IGFyZSBib3RoIGJpdGZpZWxkcywgc28gd2UgaGF2ZSB0byBkbyBpdCB0aGUKKyAgICAvLyBvbGQt
ZmFzaGlvbmVkIHdheS4KKyAgICBib29sIG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IG1f
bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOworICAgIGJvb2wgb2xkSXNOb3JtYWxGbG93T25seSA9
IG1faXNOb3JtYWxGbG93T25seTsKKworICAgIC8vIFNldCB0aGUgZmxhZyBvbiB0aGUgY3VycmVu
dCBsYXllciwgdGhlbiByZWJ1aWxkIGFuY2VzdG9yIHN0YWNraW5nCisgICAgLy8gY29udGV4dCdz
IGxpc3RzLiBUaGlzIHdheSwgd2UgY2FuIHNlZSB0aGUgZXhhY3QgZWZmZWN0cyB0aGF0IHByb21v
dGluZworICAgIC8vIHRoaXMgbGF5ZXIgd291bGQgY2F1c2UuCisgICAgbV9pc05vcm1hbEZsb3dP
bmx5ID0gdHJ1ZTsKKyAgICBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGZhbHNlOworICAg
IGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0LT5yZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tp
bmdDb250YWluZXJzLCBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwgbmVnWk9yZGVyTGlzdEJl
Zm9yZVByb21vdGUpOworCisgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gZmFsc2U7CisgICAgbV9u
ZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSB0cnVlOworICAgIGFuY2VzdG9yU3RhY2tpbmdDb250
ZXh0LT5yZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tpbmdDb250YWluZXJzLCBwb3NaT3Jk
ZXJMaXN0QWZ0ZXJQcm9tb3RlLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlKTsKKworICAgIG1f
bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nID0gb2xkTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOwor
ICAgIG1faXNOb3JtYWxGbG93T25seSA9IG9sZElzTm9ybWFsRmxvd09ubHk7CisKKyAgICBzaXpl
X3QgcG9zWk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlID0gcG9zWk9yZGVyTGlzdEJlZm9yZVBy
b21vdGUgPyBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZS0+c2l6ZSgpIDogMDsKKyAgICBzaXpl
X3QgbmVnWk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlID0gbmVnWk9yZGVyTGlzdEJlZm9yZVBy
b21vdGUgPyBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZS0+c2l6ZSgpIDogMDsKKyAgICBzaXpl
X3QgcG9zWk9yZGVyTGlzdFNpemVBZnRlclByb21vdGUgPSBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9t
b3RlID8gcG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZS0+c2l6ZSgpIDogMDsKKyAgICBzaXplX3Qg
bmVnWk9yZGVyTGlzdFNpemVBZnRlclByb21vdGUgPSBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3Rl
ID8gbmVnWk9yZGVyTGlzdEFmdGVyUHJvbW90ZS0+c2l6ZSgpIDogMDsKKworICAgIGJvb2wgaGFz
QmFja2dyb3VuZCA9IHJlbmRlcmVyKCktPmhhc0JhY2tncm91bmQoKTsKKyAgICBib29sIHdlQXJl
UG9zaXRpb25lZCA9IHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpOworCisgICAgY29uc3QgUmVu
ZGVyTGF5ZXIqIHBvc2l0aW9uZWRBbmNlc3RvciA9IHBhcmVudCgpOworICAgIHdoaWxlIChwb3Np
dGlvbmVkQW5jZXN0b3IgJiYgIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3NpdGlvbmVkQW5jZXN0
b3IpICYmICFwb3NpdGlvbmVkQW5jZXN0b3ItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAg
IHBvc2l0aW9uZWRBbmNlc3RvciA9IHBvc2l0aW9uZWRBbmNlc3Rvci0+cGFyZW50KCk7CisgICAg
aWYgKHBvc2l0aW9uZWRBbmNlc3RvciAmJiAoIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3NpdGlv
bmVkQW5jZXN0b3IpIHx8IHBvc2l0aW9uZWRBbmNlc3Rvci0+aXNTdGFja2luZ0NvbnRleHQoKSkp
CisgICAgICAgIHBvc2l0aW9uZWRBbmNlc3RvciA9IDA7CisKKyAgICAvLyBJbnNlcnQgdGhpcyBp
bnRvIHRoZSBwb3NaT3JkZXJpc3RCZWZvcmVQcm9tb3RlIGRpcmVjdGx5IGFmdGVyIHRoZQorICAg
IC8vIHBvc2l0aW9uZWQgYW5jZXN0b3IsIGlmIHRoZXJlIGlzIG9uZS4gT3RoZXJ3aXNlLCBhZGQg
aXQgdG8gdGhlIHZlcnkKKyAgICAvLyBiZWdpbm5pbmcuCisgICAgaWYgKCF3ZUFyZVBvc2l0aW9u
ZWQpIHsKKyAgICAgICAgaWYgKCFwb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgIGlm
ICghcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUpCisgICAgICAgICAgICAgICAgcG9zWk9yZGVy
TGlzdEJlZm9yZVByb21vdGUgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlbmRlckxheWVyKj4oKSk7
CisKKyAgICAgICAgICAgIHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5wcmVwZW5kKHRoaXMp
OworICAgICAgICAgICAgcG9zWk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlKys7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcG9z
Wk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAg
aWYgKHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5hdChpbmRleCkgPT0gcG9zaXRpb25lZEFu
Y2VzdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3Rl
LT5pbnNlcnQoaW5kZXggKyAxLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVy
TGlzdFNpemVCZWZvcmVQcm9tb3RlKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGZv
ciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpbnQgY2hpbGRNaW5JbmRleCA9IDA7Ci0gICAg
ICAgIGludCBjaGlsZE1heEluZGV4ID0gMDsKLSAgICAgICAgaW50IGNoaWxkQ291bnQgPSAwOwot
ICAgICAgICBjaGlsZC0+dXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09y
ZGVyUmVjdXJzaXZlKGxvb2t1cCwgY2hpbGRNaW5JbmRleCwgY2hpbGRNYXhJbmRleCwgY2hpbGRD
b3VudCwgZmFsc2UpOwotICAgICAgICBpZiAoY2hpbGRDb3VudCkgewotICAgICAgICAgICAgY291
bnQgKz0gY2hpbGRDb3VudDsKLSAgICAgICAgICAgIG1pbkluZGV4ID0gc3RkOjptaW4obWluSW5k
ZXgsIGNoaWxkTWluSW5kZXgpOwotICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJ
bmRleCwgY2hpbGRNYXhJbmRleCk7CisgICAgc2l6ZV90IHNpemVCZWZvcmVQcm9tb3RlID0gcG9z
Wk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlICsgbmVnWk9yZGVyTGlzdFNpemVCZWZvcmVQcm9t
b3RlOworICAgIHNpemVfdCBzaXplQWZ0ZXJQcm9tb3RlID0gcG9zWk9yZGVyTGlzdFNpemVBZnRl
clByb21vdGUgKyBuZWdaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZTsKKworICAgIGJvb2wgY2Fu
UHJvbW90ZSA9IHRydWU7CisKKyAgICAvLyBTY2FuIG92ZXIgdGhlIGxpc3RzIHR3aWNlIC0gdGhl
IGZpcnN0IHRpbWUgZnJvbSBsZWZ0LXRvLXJpZ2h0IGFuZCB0aGUKKyAgICAvLyBzZWNvbmQgZnJv
bSByaWdodC10by1sZWZ0IC0gZWFjaCB0aW1lIHN0b3BwaW5nIHdoZW4gd2UgaGl0IHRoaXMgaW4K
KyAgICAvLyB0aGUgYWZ0ZXItcHJvbW90ZSBsaXN0LiBXZSBjaGVjayBhbG9uZyB0aGUgd2F5IGZv
ciBhbnkgaW5jb25zaXN0ZW5jaWVzCisgICAgLy8gYmV0d2VlbiB0aGUgdHdvIGxpc3RzIHRoYXQg
Y291bGQgY2F1c2UgYSBjaGFuZ2UgaW4gcGFpbnQgb3JkZXIgaWYgd2UKKyAgICAvLyBwcm9tb3Rl
LgorICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisgICAgICAgIGJv
b2wgZnJvbUxlZnQgPSBwYXNzOworCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBzaXplQmVmb3JlUHJvbW90ZSAmJiBpbmRleCA8IHNpemVBZnRlclByb21vdGU7IGluZGV4
KyspIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckxheWVyKiBsYXllckJlZm9yZVByb21vdGUg
PSBnZXRTdGFja2luZ09yZGVyRWxlbWVudEF0KHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLmdl
dCgpLCBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZS5nZXQoKSwgZnJvbUxlZnQsIGluZGV4KTsK
KyAgICAgICAgICAgIGNvbnN0IFJlbmRlckxheWVyKiBsYXllckFmdGVyUHJvbW90ZSA9IGdldFN0
YWNraW5nT3JkZXJFbGVtZW50QXQocG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZS5nZXQoKSwgbmVn
Wk9yZGVyTGlzdEFmdGVyUHJvbW90ZS5nZXQoKSwgZnJvbUxlZnQsIGluZGV4KTsKKworICAgICAg
ICAgICAgaWYgKGxheWVyQmVmb3JlUHJvbW90ZSAhPSBsYXllckFmdGVyUHJvbW90ZSkgeworICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGZpbmQgYSBtaXNtYXRjaCwgdGhlIG9ubHkgc2l0dWF0aW9u
IHdoZXJlIHdlIGhhdmVuJ3QKKyAgICAgICAgICAgICAgICAvLyBuZWNlc3NhcmlseSBjaGFuZ2Vk
IHBhaW50IG9yZGVyIHlldCBpcyBpZiBsYXllckFmdGVyUHJvbW90ZQorICAgICAgICAgICAgICAg
IC8vIGlzIHRoaXMuCisgICAgICAgICAgICAgICAgaWYgKGxheWVyQWZ0ZXJQcm9tb3RlICE9IHRo
aXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FuUHJvbW90ZSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBBbHNvLCBpZiB0aGUgY3VycmVudCBsYXllciBoYXMgYSBiYWNrZ3JvdW5kLCB0aGVuIGFueQor
ICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRyZW4gd2lsbCBnZXQgYmV0
d2VlbiB0aGUgYmFja2dyb3VuZAorICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgcmVzdCBvZiB0
aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgaWYgKHBhc3MgJiYgaGFzQmFja2dyb3VuZCkgewor
ICAgICAgICAgICAgICAgICAgICBjYW5Qcm9tb3RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGxheWVyQWZ0ZXJQcm9tb3RlID09IHRoaXMpCisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIWNhblByb21vdGUpCisgICAgICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBpZiAoIWlzU3RhY2tpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgYm9v
bCBuZXdWYWx1ZSA9IG1heEluZGV4IC0gbWluSW5kZXggPT0gY291bnQ7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBib29sIGRpZFVwZGF0ZSA9IG5ld1ZhbHVlICE9
IG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyOworICAgIGJvb2wgZGlk
VXBkYXRlID0gKGNhblByb21vdGUgIT0gbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ2NvbnRhaW5l
cik7CiAjZW5kaWYKLSAgICAgICAgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5n
T3JkZXIgPSBuZXdWYWx1ZTsKKworICAgIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWlu
ZXIgPSBjYW5Qcm9tb3RlOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
ICAgICBpZiAoZGlkVXBkYXRlKQotICAgICAgICAgICAgdXBkYXRlTmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7CisgICAgaWYgKGRpZFVwZGF0ZSkKKyAgICAgICAgdXBkYXRlTmVlZHNDb21wb3Np
dGVkU2Nyb2xsaW5nKCk7CiAjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2Fu
QmVTdGFja2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KFJlbmRlckxheWVyKiBhbmNlc3RvclN0YWNr
aW5nQ29udGV4dCkKK3sKKyAgICBpZiAodGhpcyAhPSBhbmNlc3RvclN0YWNraW5nQ29udGV4dCkg
eworICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKGFuY2VzdG9yU3RhY2tpbmdD
b250ZXh0KTsKICAgICB9CisKKyAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGNoaWxk
LT51cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyUmVjdXJzaXZlbHkoYW5jZXN0b3JTdGFja2lu
Z0NvbnRleHQpOwogfQogCisKIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVSZXBhaW50UmVjdHMo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVu
ZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwKQogewogICAgIEFTU0VSVCghbV92aXNpYmxlQ29u
dGVudFN0YXR1c0RpcnR5KTsKQEAgLTk4MCw3ICs5OTksNyBAQCBib29sIFJlbmRlckxheWVyOjpj
YW5CZVN0YWNraW5nQ29udGFpbmVyKCkgY29uc3QKICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQo
KSB8fCAhc3RhY2tpbmdDb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBy
ZXR1cm4gbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXI7CisgICAgcmV0
dXJuIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWluZXI7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OnNldEhhc1Zpc2libGVDb250ZW50KCkKQEAgLTEyOTcsMTIgKzEzMTYsNiBAQCBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OnN0YWNraW5nQ29udGFpbmVyKCkgY29uc3QKICAgICByZXR1
cm4gbGF5ZXI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc2l0aW9uZWRDb250YWluZXIo
UmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGxheWVy
UmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLSAgICByZXR1cm4gbGF5ZXItPmlzUm9vdExh
eWVyKCkgfHwgbGF5ZXJSZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5ZXItPmhhc1RyYW5z
Zm9ybSgpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXhlZFBvc2l0aW9uZWRDb250YWlu
ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQogewogICAgIHJldHVybiBsYXllci0+aXNSb290TGF5ZXIo
KSB8fCBsYXllci0+aGFzVHJhbnNmb3JtKCk7CkBAIC0xOTM4LDYgKzE5NTEsMTkgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKICAgICByZXR1cm4g
bV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmc7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUlzTm9ybWFsRmxvd09ubHkoKQoreworICAgIGJvb2wgaXNOb3JtYWxGbG93T25seSA9IHNob3Vs
ZEJlTm9ybWFsRmxvd09ubHkoKTsKKyAgICBpZiAoaXNOb3JtYWxGbG93T25seSAhPSBtX2lzTm9y
bWFsRmxvd09ubHkpIHsKKyAgICAgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gaXNOb3JtYWxGbG93
T25seTsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIHAgPSBwYXJlbnQoKTsKKyAgICAgICAgaWYgKHAp
CisgICAgICAgICAgICBwLT5kaXJ0eU5vcm1hbEZsb3dMaXN0KCk7CisgICAgICAgIGRpcnR5U3Rh
Y2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygpOworICAgIH0KK30KKworCiB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKQogewogICAgIGJvb2wgb2xkTmVl
ZHNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmc7CkBAIC0x
OTU4LDYgKzE5ODQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVOZWVkc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKQogICAgIH0KIAogICAgIGlmIChvbGROZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcg
IT0gbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHsKKyAgICAgICAgdXBkYXRlSXNOb3JtYWxG
bG93T25seSgpOwogICAgICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogICAgICAgICBp
ZiAoaXNTdGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0cygp
OwpAQCAtNTM2MSw3ICs1Mzg4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhi
b29sIGluY2x1ZGVIaWRkZW5MYXllcnMsIENvbGxlY3RMYXllcnNCZWhhdmlvcgogCiB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKQogewotICAgIGJvb2wgc2hvdWxk
VXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyID0gaXNTdGFja2lu
Z0NvbnRleHQoKSAmJiAobV96T3JkZXJMaXN0c0RpcnR5IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0
eSk7CisgICAgYm9vbCBzaG91bGRVcGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyID0gYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpICYmIGlzU3RhY2tpbmdD
b250ZXh0KCkgJiYgKG1fek9yZGVyTGlzdHNEaXJ0eSB8fCBtX25vcm1hbEZsb3dMaXN0RGlydHkp
OwogICAgIHVwZGF0ZVpPcmRlckxpc3RzKCk7CiAgICAgdXBkYXRlTm9ybWFsRmxvd0xpc3QoKTsK
IApAQCAtNTM3MCw4ICs1Mzk3LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyTGlz
dHNJZk5lZWRlZCgpCiAgICAgICAgIHJlZmxlY3Rpb25MYXllci0+dXBkYXRlTm9ybWFsRmxvd0xp
c3QoKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkVXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1
b3VzSW5TdGFja2luZ09yZGVyKSB7Ci0gICAgICAgIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGln
dW91c0luU3RhY2tpbmdPcmRlcigpOworICAgIGlmIChzaG91bGRVcGRhdGVDYW5CZVN0YWNraW5n
Q29udGFpbmVyKSB7CisgICAgICAgIC8vIGNhbGwgVXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5l
ciBmb3IgYWxsIGRlc2NlbmRhbnRzLAorICAgICAgICAvLyBwYXNzaW5nIHNlbGYgaW4gYXMgYW5j
ZXN0b3Igc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgdXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRh
aW5lclJlY3Vyc2l2ZWx5KHRoaXMpOworCiAgICAgICAgIC8vIFRoZSBhYm92ZSBmdW5jdGlvbiBj
YW4gY2F1c2UgdXMgdG8gdXBkYXRlIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAg
IC8vIGFuZCBkaXJ0eSBvdXIgbGF5ZXIgbGlzdHMuIFJlZnJlc2ggdGhlbSBpZiBuZWNlc3Nhcnku
CiAgICAgICAgIHVwZGF0ZVpPcmRlckxpc3RzKCk7CkBAIC01NTU4LDcgKzU1ODgsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkUwogICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQgPSB0aGlzLT5p
c1N0YWNraW5nQ29udGV4dCgpOwogICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCAhPSB3YXNTdGFj
a2luZ0NvbnRleHQpIHsKICAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3Rz
KCk7Ci0gICAgICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCkKKyAgICAgICAgaWYgKGlzU3RhY2tp
bmdDb250ZXh0IHx8IGlzU3RhY2tpbmdDb250YWluZXIoKSkKICAgICAgICAgICAgIGRpcnR5Wk9y
ZGVyTGlzdHMoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2xlYXJaT3JkZXJMaXN0cygp
OwpAQCAtNTU2OSw3ICs1NTk5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU3RhY2tpbmdD
b250ZXh0c0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFMKICAgICAvLyBs
aWtlbHkgYmUgZm9sZGVkIGFsb25nIHdpdGggdGhlIHJlc3QuCiAgICAgaWYgKG9sZFN0eWxlLT56
SW5kZXgoKSAhPSByZW5kZXJlcigpLT5zdHlsZSgpLT56SW5kZXgoKSB8fCBvbGRTdHlsZS0+dmlz
aWJpbGl0eSgpICE9IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSkgewogICAgICAg
ICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMoKTsKLSAgICAgICAgaWYgKGlzU3Rh
Y2tpbmdDb250ZXh0KQorICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2lu
Z0NvbnRhaW5lcigpKQogICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0cygpOwogICAgIH0KIH0K
QEAgLTU2NTgsMTQgKzU2ODgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVPdXRPZkZsb3dQ
b3NpdGlvbmVkKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIAogdm9pZCBSZW5kZXJMYXll
cjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQogewotICAgIGJvb2wgaXNOb3JtYWxGbG93T25seSA9IHNob3VsZEJlTm9ybWFsRmxvd09u
bHkoKTsKLSAgICBpZiAoaXNOb3JtYWxGbG93T25seSAhPSBtX2lzTm9ybWFsRmxvd09ubHkpIHsK
LSAgICAgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gaXNOb3JtYWxGbG93T25seTsKLSAgICAgICAg
UmVuZGVyTGF5ZXIqIHAgPSBwYXJlbnQoKTsKLSAgICAgICAgaWYgKHApCi0gICAgICAgICAgICBw
LT5kaXJ0eU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAgICAgIGRpcnR5U3RhY2tpbmdDb250YWluZXJa
T3JkZXJMaXN0cygpOwotICAgIH0KKyAgICB1cGRhdGVJc05vcm1hbEZsb3dPbmx5KCk7CiAKICAg
ICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTU5PTkUgJiYgcmVuZGVyZXIo
KS0+aXNCb3goKSkgewogICAgICAgICBpZiAoIW1fbWFycXVlZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKaW5kZXggMjBiMDFjYTU3YWNhNzczYjdhODg2MmNkYjQzODMyYWNk
MDg5MGJlZS4uNjJmZTA5MGZiZGZjNmJiMTkxMWYwOWFkMmM5YTFmMzQ2MzllZmQ2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTgwMCw4ICs4MDAsMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWludGluZ0xheWVyRGVz
Y2VuZGFudFN0YXR1cygpOwogCiAgICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3Zl
cmZsb3dTY3JvbGxFbmFibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVEZXNjZW5kYW50c0Fy
ZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKTsKLSAgICB2b2lkIHVwZGF0ZURlc2NlbmRhbnRz
QXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShjb25zdCBIYXNoTWFwPGNvbnN0
IFJlbmRlckxheWVyKiwgaW50PiYsIGludCYgbWluSW5kZXgsIGludCYgbWF4SW5kZXgsIGludCYg
Y291bnQsIGJvb2wgZmlyc3RJdGVyYXRpb24pOworCisgICAgYm9vbCBpc1Byb21vdGVkTGF5ZXJM
aXN0SW5Db3JyZWN0U3RhY2tpbmdPcmRlcihjb25zdCBWZWN0b3I8Y29uc3QgUmVuZGVyTGF5ZXIq
PiYsIGNvbnN0IFZlY3Rvcjxjb25zdCBSZW5kZXJMYXllcio+JikgY29uc3Q7CisgICAgdm9pZCB1
cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKFJlbmRlckxheWVyKik7CisgICAgdm9pZCB1cGRh
dGVDYW5CZVN0YWNraW5nQ29udGFpbmVyUmVjdXJzaXZlbHkoUmVuZGVyTGF5ZXIqKTsKIAogICAg
IHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCogPSAwKTsKICAgICB2b2lk
IGNvbXB1dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwpAQCAtODIzLDYgKzgy
NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNPdXRPZkZsb3dQ
b3NpdGlvbmVkRGVzY2VuZGFudFN0YXR1cygpOwogICAgIHZvaWQgdXBkYXRlT3V0T2ZGbG93UG9z
aXRpb25lZChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCisgICAgdm9pZCB1cGRhdGVJ
c05vcm1hbEZsb3dPbmx5KCk7CiAgICAgdm9pZCB1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY2hhbmdlZC4KQEAg
LTEwNzgsNyArMTA4MSw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBJZiB0aGlzIGlzIHRydWUsIHRo
ZW4gbm8gbm9uLWRlc2NlbmRhbnQgYXBwZWFycyBiZXR3ZWVuIGFueSBvZiBvdXIKICAgICAvLyBk
ZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4gVGhpcyBpcyBvbmUgb2YgdGhlIHJlcXVpcmVt
ZW50cyBvZiBiZWluZwogICAgIC8vIGFibGUgdG8gc2FmZWx5IGJlY29tZSBhIHN0YWNraW5nIGNv
bnRleHQuCi0gICAgYm9vbCBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRl
ciA6IDE7CisgICAgYm9vbCBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nY29udGFpbmVyIDogMTsK
IAogICAgIGNvbnN0IGJvb2wgbV9pc1Jvb3RMYXllciA6IDE7CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NDg2NzRhMGE0
YWExZDBhNTcyZTY2YzQ1ZTRhNGUwZjk5YTQzZGEwLi45MmU2OWM5YmVlYTViNjNlMzQxMTI3YTRh
ZjlkNWMwMjdjNzk2NzhkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMDItMjcgIEdsZW5u
IEhhcnRtYW5uICA8aGFydG1hbm5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBTaW1wbGlmeSBs
b2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkIHNjcm9sbGluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MzAyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugc2ltcGxp
ZnkgdGhlIGxvZ2ljIGZvciBhdXRvbWF0aWNhbGx5IG9wdGluZyBpbnRvIGNvbXBvc2l0ZWQKKyAg
ICAgICAgc2Nyb2xsaW5nIGJ5IGdlbmVyYXRpbmcgdHdvIHNldHMgb2Ygei1vcmRlciBsaXN0cywg
Zmlyc3QgZm9yY2luZyBhCisgICAgICAgIGxheWVyIHRvIG5vdCBwcm9tb3RlLCB0aGVuIGZvcmNp
bmcgaXQgdG8gcHJvbW90ZSB0aGUgc2Vjb25kIHRpbWUuIFRoZQorICAgICAgICB0d28gc2V0cyBv
ZiBsaXN0cyBjYW4gYmUgcmVsYXRpdmVseSBlYXNpbHkgY29tcGFyZWQgZm9yIGFueSBwb3NzaWJs
ZQorICAgICAgICBjaGFuZ2UgaW4gc3RhY2tpbmcgb3JkZXIuIFRoaXMgc2hvdWxkIGJlIG1vcmUg
aW50dWl0aXZlIGFuZCBtb3JlCisgICAgICAgIHJvYnVzdCB0aGFuIHRoZSBjdXJyZW50IGltcGxl
bWVudGF0aW9uLgorCisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxs
eS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
Y29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNj
cm9sbGluZy5odG1sOgorICAgICAgICAqIGNvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNv
bXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNj
cm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDItMjUgIEFsZXhpcyBNZW5h
cmQgIDxhbGV4aXNAd2Via2l0Lm9yZz4KIAogICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5IHBy
b3BlcnR5IGRvZXNuJ3QgYWNjZXB0ICJhbGwsIDxJREVOVD4iLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3Np
dGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVy
Zmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVk
LnR4dAppbmRleCBkZWVmNTE1MDJiNzlkZDA0ZGE0NzhkNTFlZjAyNDk3MThhNjQ5Mjc4Li44YjEz
Nzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0
ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9v
dmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVj
dGVkLnR4dApAQCAtMSwxMjcgKzEgQEAKLUl0ZXJhdGlvbiAwOiBQYXNzZWQKLUl0ZXJhdGlvbiAw
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTogUGFzc2VkCi1JdGVyYXRpb24gMSwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDI6IFBhc3NlZAotSXRlcmF0aW9uIDIsIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biAzOiBQYXNzZWQKLUl0ZXJhdGlvbiAzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDogUGFzc2Vk
Ci1JdGVyYXRpb24gNCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU6IFBhc3NlZAotSXRlcmF0aW9u
IDUsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA2OiBQYXNzZWQKLUl0ZXJhdGlvbiA2LCBsYXllciB0
cmVlCi1JdGVyYXRpb24gNzogUGFzc2VkCi1JdGVyYXRpb24gNywgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDg6IFBhc3NlZAotSXRlcmF0aW9uIDgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA5OiBQ
YXNzZWQKLUl0ZXJhdGlvbiA5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTA6IFBhc3NlZAot
SXRlcmF0aW9uIDEwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTE6IFBhc3NlZAotSXRlcmF0aW9u
IDExLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTI6IFBhc3NlZAotSXRlcmF0aW9uIDEyLCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gMTM6IFBhc3NlZAotSXRlcmF0aW9uIDEzLCBubyBsYXllciB0
cmVlCi1JdGVyYXRpb24gMTQ6IFBhc3NlZAotSXRlcmF0aW9uIDE0LCBubyBsYXllciB0cmVlCi1J
dGVyYXRpb24gMTU6IFBhc3NlZAotSXRlcmF0aW9uIDE1LCBubyBsYXllciB0cmVlCi1JdGVyYXRp
b24gMTY6IFBhc3NlZAotSXRlcmF0aW9uIDE2LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTc6
IFBhc3NlZAotSXRlcmF0aW9uIDE3LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTg6IFBhc3Nl
ZAotSXRlcmF0aW9uIDE4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTk6IFBhc3NlZAotSXRl
cmF0aW9uIDE5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMjA6IFBhc3NlZAotSXRlcmF0aW9u
IDIwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjE6IFBhc3NlZAotSXRlcmF0aW9uIDIxLCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMjI6IFBhc3NlZAotSXRlcmF0aW9uIDIyLCBsYXllciB0cmVlCi1J
dGVyYXRpb24gMjM6IFBhc3NlZAotSXRlcmF0aW9uIDIzLCBsYXllciB0cmVlCi1JdGVyYXRpb24g
MjQ6IFBhc3NlZAotSXRlcmF0aW9uIDI0LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjU6IFBhc3Nl
ZAotSXRlcmF0aW9uIDI1LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjY6IFBhc3NlZAotSXRlcmF0
aW9uIDI2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjc6IFBhc3NlZAotSXRlcmF0aW9uIDI3LCBs
YXllciB0cmVlCi1JdGVyYXRpb24gMjg6IFBhc3NlZAotSXRlcmF0aW9uIDI4LCBsYXllciB0cmVl
Ci1JdGVyYXRpb24gMjk6IFBhc3NlZAotSXRlcmF0aW9uIDI5LCBsYXllciB0cmVlCi1JdGVyYXRp
b24gMzA6IFBhc3NlZAotSXRlcmF0aW9uIDMwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzE6IFBh
c3NlZAotSXRlcmF0aW9uIDMxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzI6IFBhc3NlZAotSXRl
cmF0aW9uIDMyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzM6IFBhc3NlZAotSXRlcmF0aW9uIDMz
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzQ6IFBhc3NlZAotSXRlcmF0aW9uIDM0LCBubyBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMzU6IFBhc3NlZAotSXRlcmF0aW9uIDM1LCBubyBsYXllciB0cmVl
Ci1JdGVyYXRpb24gMzY6IFBhc3NlZAotSXRlcmF0aW9uIDM2LCBsYXllciB0cmVlCi1JdGVyYXRp
b24gMzc6IFBhc3NlZAotSXRlcmF0aW9uIDM3LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzg6IFBh
c3NlZAotSXRlcmF0aW9uIDM4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMzk6IFBhc3NlZAot
SXRlcmF0aW9uIDM5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNDA6IFBhc3NlZAotSXRlcmF0
aW9uIDQwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDE6IFBhc3NlZAotSXRlcmF0aW9uIDQxLCBs
YXllciB0cmVlCi1JdGVyYXRpb24gNDI6IFBhc3NlZAotSXRlcmF0aW9uIDQyLCBsYXllciB0cmVl
Ci1JdGVyYXRpb24gNDM6IFBhc3NlZAotSXRlcmF0aW9uIDQzLCBsYXllciB0cmVlCi1JdGVyYXRp
b24gNDQ6IFBhc3NlZAotSXRlcmF0aW9uIDQ0LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDU6IFBh
c3NlZAotSXRlcmF0aW9uIDQ1LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDY6IFBhc3NlZAotSXRl
cmF0aW9uIDQ2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDc6IFBhc3NlZAotSXRlcmF0aW9uIDQ3
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDg6IFBhc3NlZAotSXRlcmF0aW9uIDQ4LCBubyBsYXll
ciB0cmVlCi1JdGVyYXRpb24gNDk6IFBhc3NlZAotSXRlcmF0aW9uIDQ5LCBubyBsYXllciB0cmVl
Ci1JdGVyYXRpb24gNTA6IFBhc3NlZAotSXRlcmF0aW9uIDUwLCBsYXllciB0cmVlCi1JdGVyYXRp
b24gNTE6IFBhc3NlZAotSXRlcmF0aW9uIDUxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTI6IFBh
c3NlZAotSXRlcmF0aW9uIDUyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTM6IFBhc3NlZAotSXRl
cmF0aW9uIDUzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTQ6IFBhc3NlZAotSXRlcmF0aW9uIDU0
LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTU6IFBhc3NlZAotSXRlcmF0aW9uIDU1LCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gNTY6IFBhc3NlZAotSXRlcmF0aW9uIDU2LCBubyBsYXllciB0
cmVlCi1JdGVyYXRpb24gNTc6IFBhc3NlZAotSXRlcmF0aW9uIDU3LCBubyBsYXllciB0cmVlCi1J
dGVyYXRpb24gNTg6IFBhc3NlZAotSXRlcmF0aW9uIDU4LCBubyBsYXllciB0cmVlCi1JdGVyYXRp
b24gNTk6IFBhc3NlZAotSXRlcmF0aW9uIDU5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNjA6
IFBhc3NlZAotSXRlcmF0aW9uIDYwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNjE6IFBhc3NlZAot
SXRlcmF0aW9uIDYxLCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNjI6IFBhc3NlZAotSXRlcmF0
aW9uIDYyLCBsYXllciB0cmVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5n
L292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRt
bCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWlu
dG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAppbmRleCAxZTY3YjVkZDc4ZmI3MTFiYmUxNGMx
NjYxODgzMmU2MTFkYWZhZjQwLi5jMDIyNmI4MDg3ZGI3OWJmZTE1MjQ3MTQ4OGUwOWRmNDdlOTE1
YWY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0
aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVk
LXNjcm9sbGluZy5odG1sCkBAIC0xMiwxMiArMTIsMTQgQEAKICAgICAgIG92ZXJmbG93OiBzY3Jv
bGw7CiAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsK
KyAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMEZGRkY7CiAgICAgfQogCiAgICAgLnNjcm9sbGVk
IHsKICAgICAgIHdpZHRoOiAxODBweDsKLSAgICAgIGhlaWdodDogOTBweDsKKyAgICAgIGhlaWdo
dDogMzBweDsKICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgIHRvcDogNzBweDsKICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyYXk7CiAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgfQpA
QCAtMjUsMjUgKzI3LDMyIEBACiAgICAgLnBvc2l0aW9uZWQgewogICAgICAgd2lkdGg6IDEyMHB4
OwogICAgICAgaGVpZ2h0OiAyNDBweDsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOwog
ICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgIH0KIAorICAgICNzZWNvbmRDaGlsZCB7Cisg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0M5OTk5OworICAgICAgdG9wOiA1MHB4OworICAgIH0K
KwogICAgICNwcmVkZWNlc3NvciB7CiAgICAgICBsZWZ0OiAyMHB4OwogICAgICAgdG9wOiAyMHB4
OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5MDA2NjsKICAgICB9CiAKICAgICAjc3VjY2Vz
c29yIHsKLSAgICAgIGxlZnQ6IDE2MHB4OworICAgICAgbGVmdDogMjBweDsKICAgICAgIHRvcDog
MjBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwNjY7CiAgICAgfQogCi0gICAgI2Rl
c2NlbmRhbnQgewotICAgICAgbGVmdDogOTBweDsKLSAgICAgIHRvcDogMjBweDsKLSAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGJsdWU7Ci0gICAgICB6LWluZGV4OiAtMjA7CisgICAgI25vcm1hbEZs
b3cgeworICAgICAgd2lkdGg6IDE4MHB4OworICAgICAgaGVpZ2h0OiAzMHB4OworICAgICAgbWFy
Z2luOiAxMHB4OworICAgICAgdG9wOiAtMjBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHll
bGxvdzsKICAgICB9CiAgIDwvc3R5bGU+CiAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBjaGFyc2V0PSJ1dGYtOCI+CkBAIC01Miw5ICs2MSw2IEBACiAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQogICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CiAKLSAgICBpZiAod2luZG93
LmludGVybmFscykKLSAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCh0cnVlKTsKLQogICAgIGZ1bmN0
aW9uIHdyaXRlKHN0cikKICAgICB7CiAgICAgICB2YXIgcHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NvbnNvbGUnKTsKQEAgLTYyLDE2OSArNjgsMTk1IEBACiAgICAgICBwcmUuYXBwZW5k
Q2hpbGQodGV4dCk7CiAgICAgfQogCi0gICAgdmFyIGl0ZXJhdGlvbiA9IDA7Ci0gICAgZnVuY3Rp
b24gcHJpbnRSZXN1bHQoZXhwZWN0ZWRSZXN1bHQpCisgICAgZnVuY3Rpb24gZGlkT3B0SW4oKQor
ICAgIHsKKyAgICAgIC8vIEZvcmNlIGEgc3R5bGUgcmVjYWxjLgorICAgICAgZG9jdW1lbnQuYm9k
eS5vZmZzZXRUb3A7CisKKyAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgd2luZG93Lmlu
dGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOworICAgICAgdmFyIGxheWVyVHJlZSA9IHdp
bmRvdy5pbnRlcm5hbHMubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50KTsKKworICAgICAgaWYgKGRl
YnVnTW9kZSkKKyAgICAgICAgICB3cml0ZShsYXllclRyZWUpOworCisgICAgICByZXR1cm4gISFs
YXllclRyZWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0U3RhY2tpbmdPcmRlcigpCiAgICAg
eworICAgICAgdmFyIGRpdkVsZW1lbnRzID0gW107CiAgICAgICAvLyBGb3JjZSBhIHN0eWxlIHJl
Y2FsYy4KICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwogCi0gICAgICBpZiAod2luZG93
LmludGVybmFscykgewotICAgICAgICAvLyBGb3JjZSBhIGxheW91dC4KLSAgICAgICAgd2luZG93
LmludGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOwotICAgICAgICB2YXIgbGF5ZXJUcmVl
ID0gd2luZG93LmludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQpOwotCi0gICAgICAg
IGlmICghbGF5ZXJUcmVlID09ICFleHBlY3RlZFJlc3VsdCkKLSAgICAgICAgICB3cml0ZSgnSXRl
cmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJpbmcoKSArICc6IFBhc3NlZCcpCi0gICAgICAgIGVs
c2UKLSAgICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJpbmcoKSAr
ICc6IEZBSUxFRCcpCi0KLSAgICAgICAgaWYgKGxheWVyVHJlZSkgewotICAgICAgICAgIHdyaXRl
KCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmluZygpICsgJywgbGF5ZXIgdHJlZScpOwot
ICAgICAgICAgIGlmIChkZWJ1Z01vZGUpCi0gICAgICAgICAgICAgIHdyaXRlKGxheWVyVHJlZSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlv
bi50b1N0cmluZygpICsgJywgbm8gbGF5ZXIgdHJlZScpOworICAgICAgLy8gRm9yY2UgYSBsYXlv
dXQuCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisKKyAg
ICAgIHZhciBlcnJvckNvZGUgPSAwOworICAgICAgdmFyIHN0YWNraW5nT3JkZXIgPSB3aW5kb3cu
aW50ZXJuYWxzLm5vZGVzRnJvbVJlY3QoZG9jdW1lbnQsIDEwMCwgNzUsIDIwMCwgMjAwLCAyMDAs
IDIwMCwgZmFsc2UsIGZhbHNlLCBlcnJvckNvZGUpOworCisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHN0YWNraW5nT3JkZXIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0YWNraW5nT3Jk
ZXJbaV0ubm9kZU5hbWUgPT09ICJESVYiKSB7CisgICAgICAgICAgZGl2RWxlbWVudHMucHVzaChz
dGFja2luZ09yZGVyW2ldKTsKKyAgICAgICAgfQogICAgICAgfQotICAgICAgaXRlcmF0aW9uKys7
CisKKyAgICAgIHJldHVybiBkaXZFbGVtZW50czsKICAgICB9CiAKICAgICBmdW5jdGlvbiBkb1Rl
c3QoKQogICAgIHsKKyAgICAgIHZhciBhbmNlc3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdhbmNlc3RvcicpOwogICAgICAgdmFyIHByZWRlY2Vzc29yID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3ByZWRlY2Vzc29yJyk7CiAgICAgICB2YXIgc3VjY2Vzc29yID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3N1Y2Nlc3NvcicpOwogICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKICAgICAgIHZhciBmaXJzdENoaWxkID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0Q2hpbGQnKTsKICAgICAgIHZhciBzZWNvbmRDaGls
ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWNvbmRDaGlsZCcpOwotICAgICAgdmFyIGRl
c2NlbmRhbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVzY2VuZGFudCcpOwogICAgICAg
dmFyIGNvdW50ID0gMDsKIAotICAgICAgZGVzY2VuZGFudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
OwotCi0gICAgICAvLyBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4KLSAgICAgIGZvciAo
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDU7ICsraikgewot
ICAgICAgICAgIGZvciAoayA9IDA7IGsgPCAyOyArK2spIHsKLSAgICAgICAgICAgIGZvciAobCA9
IDA7IGwgPCAyOyArK2wpIHsKLSAgICAgICAgICAgICAgdmFyIG1pblpJbmRleCA9IDA7Ci0gICAg
ICAgICAgICAgIHZhciBtYXhaSW5kZXggPSAwOwotICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgZmlyc3RDaGlsZC5zdHlsZS56SW5kZXggPSAnMSc7Ci0gICAgICAg
ICAgICAgICAgc2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4ID0gJzMnOwotICAgICAgICAgICAgICAg
IG1heFpJbmRleCA9IDM7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSAxKSB7Ci0gICAg
ICAgICAgICAgICAgZmlyc3RDaGlsZC5zdHlsZS56SW5kZXggPSAnLTEnOwotICAgICAgICAgICAg
ICAgIHNlY29uZENoaWxkLnN0eWxlLnpJbmRleCA9ICctMyc7Ci0gICAgICAgICAgICAgICAgbWlu
WkluZGV4ID0gLTM7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmly
c3RDaGlsZC5zdHlsZS56SW5kZXggPSAnLTEnOwotICAgICAgICAgICAgICAgIHNlY29uZENoaWxk
LnN0eWxlLnpJbmRleCA9ICczJzsKLSAgICAgICAgICAgICAgICBtaW5aSW5kZXggPSAtMTsKLSAg
ICAgICAgICAgICAgICBtYXhaSW5kZXggPSAzOwotICAgICAgICAgICAgICB9CisgICAgICBmb3Ig
KHZhciBzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRlc0NvbnRhaW5lciA9IDA7IHNpYmxpbmdT
aG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVyIDw9IDE7ICsrc2libGluZ1Nob3VsZEJlWmVy
b0lmUHJlY2VkZXNDb250YWluZXIpIHsKKyAgICAgICAgZm9yICh2YXIgY29udGFpbmVySXNQb3Np
dGlvbmVkID0gMDsgY29udGFpbmVySXNQb3NpdGlvbmVkIDw9IDE7ICsrY29udGFpbmVySXNQb3Np
dGlvbmVkKSB7CisgICAgICAgICAgZm9yICh2YXIgc2libGluZ0lzU3VjY2Vzc29yID0gMDsgc2li
bGluZ0lzU3VjY2Vzc29yIDw9IDE7ICsrc2libGluZ0lzU3VjY2Vzc29yKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBoYXNQb3NpdGlvbmVkQW5jZXN0b3IgPSAwOyBoYXNQb3NpdGlvbmVkQW5jZXN0
b3IgPD0gMTsgKytoYXNQb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgdmFyIGlu
ZGljZXMgPSBbIDAsIDEsIDIsIDMgXTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgc2libGluZ0lu
ZGV4ID0gMDsgc2libGluZ0luZGV4IDwgNDsgKytzaWJsaW5nSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgc2libGluZ0luZGljZXMgPSBpbmRpY2VzLnNsaWNlKDApOworICAgICAgICAgICAg
ICAgIHNpYmxpbmdJbmRpY2VzLnNwbGljZShzaWJsaW5nSW5kZXgsIDEpOworICAgICAgICAgICAg
ICAgIGZvciAodmFyIGNvbnRhaW5lclN1YmluZGV4ID0gMDsgY29udGFpbmVyU3ViaW5kZXggPCAz
OyArK2NvbnRhaW5lclN1YmluZGV4KSB7CisgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVy
SW5kaWNlcyA9IHNpYmxpbmdJbmRpY2VzLnNsaWNlKDApOworICAgICAgICAgICAgICAgICAgdmFy
IGNvbnRhaW5lckluZGV4ID0gY29udGFpbmVySW5kaWNlc1tjb250YWluZXJTdWJpbmRleF07Cisg
ICAgICAgICAgICAgICAgICBjb250YWluZXJJbmRpY2VzLnNwbGljZShjb250YWluZXJTdWJpbmRl
eCwgMSk7CisgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RDaGlsZEluZGV4ID0gY29udGFpbmVy
SW5kaWNlc1swXTsKKyAgICAgICAgICAgICAgICAgIHZhciBzZWNvbmRDaGlsZEluZGV4ID0gY29u
dGFpbmVySW5kaWNlc1sxXTsKIAotICAgICAgICAgICAgICB2YXIgc2libGluZyA9IHByZWRlY2Vz
c29yOwotICAgICAgICAgICAgICB2YXIgdG9IaWRlID0gc3VjY2Vzc29yOwotICAgICAgICAgICAg
ICBpZiAoayA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgc2libGluZyA9IHN1Y2Nlc3NvcjsKLSAg
ICAgICAgICAgICAgICB0b0hpZGUgPSBwcmVkZWNlc3NvcjsKLSAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgdmFyIHNpYmxpbmdQcmVjZWRlc0NvbnRhaW5lciA9IHNpYmxpbmdJbmRl
eCA9PSBjb250YWluZXJJbmRleCAtIDE7CisgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGls
ZEluZGV4ID4gc2Vjb25kQ2hpbGRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJJc1Bvc2l0aW9uZWQgPT0gMSAmJiBo
YXNQb3NpdGlvbmVkQW5jZXN0b3IgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRlc0Nv
bnRhaW5lciA9PSAxICYmICFzaWJsaW5nUHJlY2VkZXNDb250YWluZXIpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICB2YXIgb3JkZXJpbmcgPSBbIG51
bGwsIG51bGwsIG51bGwsIG51bGwgXTsKKyAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW3NpYmxp
bmdJbmRleF0gPSBzaWJsaW5nSXNTdWNjZXNzb3IgPT0gMSA/IHN1Y2Nlc3NvciA6IHByZWRlY2Vz
c29yOworICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbY29udGFpbmVySW5kZXhdID0gaGFzUG9z
aXRpb25lZEFuY2VzdG9yID09IDEgPyBhbmNlc3RvciA6IGNvbnRhaW5lcjsKKyAgICAgICAgICAg
ICAgICAgIG9yZGVyaW5nW2ZpcnN0Q2hpbGRJbmRleF0gPSBmaXJzdENoaWxkOworICAgICAgICAg
ICAgICAgICAgb3JkZXJpbmdbc2Vjb25kQ2hpbGRJbmRleF0gPSBzZWNvbmRDaGlsZDsKKworICAg
ICAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAg
ICAgIHZhciB0b0hpZGUgPSBzdWNjZXNzb3I7CisgICAgICAgICAgICAgICAgICBpZiAoc2libGlu
Z0lzU3VjY2Vzc29yID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgc2libGluZyA9IHN1Y2Nl
c3NvcjsKKyAgICAgICAgICAgICAgICAgICAgdG9IaWRlID0gcHJlZGVjZXNzb3I7CisgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIHRvSGlkZS5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOworICAgICAgICAgICAgICAgICAgc2libGluZy5zdHlsZS5kaXNwbGF5ID0gJyc7CisK
KyAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbmVkID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICAgIGlmIChjb250YWluZXJJc1Bvc2l0aW9uZWQgPT0gMSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICAgICAgICAg
ICAgICBwb3NpdGlvbmVkID0gY29udGFpbmVyOworICAgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICcnOwogCi0gICAg
ICAgICAgICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIHRoZSBzYW1lIGlmIHRoZSB0aGUgZWxl
bWVudCB0byBoaWRlIGlzCi0gICAgICAgICAgICAgIC8vIGRpc3BsYXk6aGlkZGVuIG9yIGRpc3Bs
YXk6bm9uZS4KLSAgICAgICAgICAgICAgaWYgKGwgPT0gMCkKLSAgICAgICAgICAgICAgICB0b0hp
ZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHRvSGlkZS5zdHlsZS5kaXNwbGF5ID0gJ2hpZGRlbic7Ci0KLSAgICAgICAgICAgICAg
c2libGluZy5zdHlsZS5kaXNwbGF5ID0gJyc7Ci0KLSAgICAgICAgICAgICAgaWYgKGogPT0gMCkK
LSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IChtYXhaSW5kZXggKyAxKS50
b1N0cmluZygpOwotICAgICAgICAgICAgICBlbHNlIGlmIChqID09IDEpCi0gICAgICAgICAgICAg
ICAgc2libGluZy5zdHlsZS56SW5kZXggPSAobWluWkluZGV4IC0gMSkudG9TdHJpbmcoKTsKLSAg
ICAgICAgICAgICAgZWxzZSBpZiAoaiA9PSAyKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5
bGUuekluZGV4ID0gbWF4WkluZGV4LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UgaWYg
KGogPT0gMykKLSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IG1pblpJbmRl
eC50b1N0cmluZygpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2libGlu
Zy5zdHlsZS56SW5kZXggPSAoKG1pblpJbmRleCArIG1heFpJbmRleCkgLyAyKS50b1N0cmluZygp
OwotCi0gICAgICAgICAgICAgIHZhciBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgIGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA+IG1heFpJbmRleCB8fAotICAgICAgICAgICAg
ICAgICAgc2libGluZy5zdHlsZS56SW5kZXggPCBtaW5aSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgIC8vIHNpYmxpbmcgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2Ygb3VyIGRlc2NlbmRhbnRzLgot
ICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IHRydWU7Ci0gICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc2libGluZy5zdHlsZS56SW5kZXggPCBtYXhaSW5kZXggJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA+IG1pblpJbmRleCkgewotICAgICAg
ICAgICAgICAgICAgLy8gc2libGluZyBpcyBiZXR3ZWVuIG91ciBkZXNjZW5kYW50cy4KLSAgICAg
ICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfSBlbHNl
IGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA9PSBtaW5aSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgIGlmIChtaW5aSW5kZXggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxp
bmcgbGllcyBiZXR3ZWVuIHVzIChub3JtYWwgZmxvdykgYW5kIG91ciBwb3MKLSAgICAgICAgICAg
ICAgICAgICAgICAvLyB6LW9yZGVyIGRlc2NlbmRhbnRzLCBzbyB3ZSBhcmUgbm90IGNvbnRpZ3Vv
dXMuCi0gICAgICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nJ3Mg
ekluZGV4IG1hdGNoZXMgdGhlIG1pbjsgd2UncmUgb25seSBvayBpZiBpdAotICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFwcGVhcnMgZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgICAgYXJlQ29u
dGlndW91cyA9IGsgPT0gMDsKKyAgICAgICAgICAgICAgICAgIGlmIChoYXNQb3NpdGlvbmVkQW5j
ZXN0b3IgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS5wb3NpdGlv
biA9ICdyZWxhdGl2ZSc7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSBhbmNlc3Rv
cjsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBhbmNlc3Rv
ci5zdHlsZS5wb3NpdGlvbiA9ICcnOworCisgICAgICAgICAgICAgICAgICAvLyBBc3NpZ24gei1p
bmRpY2VzLgorICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAx
IHx8IGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAgICBvcmRl
cmluZ1tjb250YWluZXJJbmRleF0uc3R5bGUuekluZGV4ID0gJzAnOworICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSAn
JzsKKyAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3Iuc3R5bGUuekluZGV4ID0gJyc7CiAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2libGluZy5zdHlsZS56
SW5kZXggPT0gbWF4WkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAobWF4WkluZGV4IDwg
MCkgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcgbGllcyBiZXR3ZWVuIHVzIChu
b3JtYWwgZmxvdykgYW5kIG5lZyB6LW9yZGVyCi0gICAgICAgICAgICAgICAgICAgICAgLy8gZGVz
Y2VuZGFudHMsIHNvIHdlIGFyZSBub3QgY29udGlndW91cy4KLSAgICAgICAgICAgICAgICAgICAg
ICBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1h
eFpJbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBpcyBpbiB0
aGUgcG9zIHotb3JkZXIgbGlzdCBhbmQgZG9lcyBub3QgYWZmZWN0Ci0gICAgICAgICAgICAgICAg
ICAgICAgLy8gdXMgc2luY2Ugd2UncmUgaW4gdGhlIG5vcm1hbCBmbG93IGxpc3QgYW5kIG91cgot
ICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NhbmRhbnRzIGFyZSBpbiB0aGUgbmVnIHotb3Jk
ZXIgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGlu
ZydzIHpJbmRleCBtYXRjaGVzIHRoZSBtYXg7IHdlJ3JlIG9ubHkgb2sgaWYgaXQKLSAgICAgICAg
ICAgICAgICAgICAgICAvLyBhcHBlYXJzIGFmdGVyLgotICAgICAgICAgICAgICAgICAgICAgIGFy
ZUNvbnRpZ3VvdXMgPSBrID09IDE7CisKKyAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Wklu
ZGV4ID0gc2libGluZ1ByZWNlZGVzQ29udGFpbmVyICYmIHNpYmxpbmdTaG91bGRCZVplcm9JZlBy
ZWNlZGVzQ29udGFpbmVyID09IDEgPyAwIDogLTE7CisgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBjdXJyZW50SW5kZXggPSBjb250YWluZXJJbmRleCAtIDE7IGN1cnJlbnRJbmRleCA+PSAwOyAt
LWN1cnJlbnRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tjdXJyZW50SW5k
ZXhdLnN0eWxlLnpJbmRleCA9IGN1cnJlbnRaSW5kZXgudG9TdHJpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFpJbmRleC0tOwogICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgcHJpbnRSZXN1bHQoYXJlQ29udGlndW91cyk7Ci0gICAg
ICAgICAgICB9IC8vIGZvciBsCi0gICAgICAgICAgfSAvLyBmb3IgawotICAgICAgICB9IC8vIGZv
ciBqCi0gICAgICB9IC8vIGZvciBpCi0KLSAgICAgIC8vIE5vdyBjaGVjayB0aGF0IHdlIGRvbid0
IHByb21vdGUgaWYgd2UgaGF2ZSBhbiBvdXQgb2YgZmxvdyBkZXNjZW5kYW50LgotICAgICAgLy8g
V2UgbmVlZCB0byBoaWRlIHRoZSBwcmVkZWNlc3NvciBhbmQgc3VjY2Vzc29yIHNvIHRoZXkgZG9u
J3QgaW50ZXJmZXJlCi0gICAgICAvLyB3aXRoIHRoaXMgZXhwZXJpbWVudC4KLSAgICAgIHByZWRl
Y2Vzc29yLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgICBzdWNjZXNzb3Iuc3R5bGUuZGlz
cGxheSA9ICdub25lJzsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAg
aWYgKGkgPT0gMCkKLSAgICAgICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAnaGlkZGVu
JzsKLSAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQotICAgICAgICAgIGRlc2NlbmRhbnQuc3R5bGUu
ZGlzcGxheSA9ICcnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZGVzY2VuZGFudC5zdHlsZS5k
aXNwbGF5ID0gJ25vbmUnOwotCi0gICAgICAgIC8vIElmIHRoZSBvdXQgb2YgZmxvdyBwb3NpdGlv
bmVkIGRlc2NlbmRhbnQgaXMgdmlzaWJsZSwgd2UgY2Fubm90IG9wdAotICAgICAgICAvLyBpbnRv
IGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgotICAgICAgICBwcmludFJlc3VsdChpICE9IDEpOwotICAg
ICAgICBjb3VudCsrOwotICAgICAgfSAvLyBmb3IgaQorICAgICAgICAgICAgICAgICAgY3VycmVu
dFpJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50SW5kZXggPSBj
b250YWluZXJJbmRleCArIDE7IGN1cnJlbnRJbmRleCA8IDQ7ICsrY3VycmVudEluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW2N1cnJlbnRJbmRleF0uc3R5bGUuekluZGV4ID0g
Y3VycmVudFpJbmRleC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Wklu
ZGV4Kys7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGJlbG93LCB3aGVuIHdlIHNl
dCB3ZWJraXRUcmFuc2Zvcm0gdG8gJycsIHdlIHdhbnQgdGhhdCB0byBmb3JjZSBhIHN0eWxlIHJl
Y2FsY3VsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2luZyB0aGlzIG5vdCAnJyBo
ZXJlIHdpbGwgZm9yY2UgdGhpcyByZWNhbGN1bGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBj
b250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVooMHB4KSc7CisgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIGZvcmNlIHRvIG5vdCBwcm9tb3RlLgorICAgICAgICAgICAgICAgICAgICB3aW5k
b3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxv
d1Njcm9sbEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5
bGUud2Via2l0VHJhbnNmb3JtID0gJyc7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9sZFN0
YWNraW5nT3JkZXIgPSBnZXRTdGFja2luZ09yZGVyKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gZm9yY2UgdG8gcHJvbW90ZS4KKyAgICAgICAgICAgICAgICAgICAgd2luZG93LmludGVybmFs
cy5zZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFi
bGVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJh
bnNmb3JtID0gJ3RyYW5zbGF0ZVooMHB4KSc7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5l
d1N0YWNraW5nT3JkZXIgPSBnZXRTdGFja2luZ09yZGVyKCk7CiAKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHNob3VsZE9wdEluID0gb2xkU3RhY2tpbmdPcmRlci5sZW5ndGggPT0gbmV3U3RhY2tp
bmdPcmRlci5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
b2xkU3RhY2tpbmdPcmRlci5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgIGlm
IChvbGRTdGFja2luZ09yZGVyW2ldICE9IG5ld1N0YWNraW5nT3JkZXJbaV0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNob3VsZE9wdEluID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3Jt
ID0gJyc7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRPcHRJbiAhPSBkaWRPcHRJbigp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE9wdEluKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZSgiRkFJTCAtIHNob3VsZCd2ZSBhdXRvbWF0aWNhbGx5IG9wdGVk
IGluIGJ1dCBkaWRuJ3QgIiArIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ0ZBSUwgLSBhdXRvbWF0aWNhbGx5IG9w
dGVkIGluIGFuZCBjaGFuZ2VkIHN0YWNraW5nIG9yZGVyICcgKyBjb3VudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGNvdW50Kys7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9
CiAgICAgfSAvLyBmdW5jdGlvbiBkb1Rlc3QKIAorICAgIGZ1bmN0aW9uIHRvZ2dsZSgpIHsKKyAg
ICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7
CisgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gY29udGFpbmVyLnN0eWxl
LndlYmtpdFRyYW5zZm9ybSA/ICcnIDogJ3RyYW5zbGF0ZVooMHB4KSc7CisKKyAgICAgIC8vIEZv
cmNlIGEgc3R5bGUgcmVjYWxjLgorICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAg
ICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgd2luZG93LmludGVybmFscy5ib3VuZGluZ0Jv
eChjb250YWluZXIpOworICAgIH0KKwogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgZG9UZXN0LCBmYWxzZSk7CiAgIDwvc2NyaXB0PgogPC9oZWFkPgogCiA8Ym9keT4KLSAgPGRp
diBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InByZWRlY2Vzc29yIj48L2Rpdj4KLSAgPGRpdiBjbGFz
cz0iY29udGFpbmVyIiBpZD0iY29udGFpbmVyIj4KLSAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIg
aWQ9ImZpcnN0Q2hpbGQiPjwvZGl2PgotICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0ic2Vj
b25kQ2hpbGQiPjwvZGl2PgotICAgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJkZXNjZW5k
YW50Ij48L2Rpdj4KKyAgPGRpdiBpZD0iYW5jZXN0b3IiPgorICAgIDxkaXYgY2xhc3M9InBvc2l0
aW9uZWQiIGlkPSJwcmVkZWNlc3NvciI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVy
IiBpZD0iY29udGFpbmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0iZmlyc3RD
aGlsZCI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIgaWQ9InNlY29uZENoaWxk
Ij48L2Rpdj4KKyAgICAgIDxkaXYgaWQ9Im5vcm1hbEZsb3ciPjwvZGl2PgorICAgIDwvZGl2Pgor
ICAgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJzdWNjZXNzb3IiPjwvZGl2PgogICA8L2Rp
dj4KLSAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InN1Y2Nlc3NvciI+PC9kaXY+CiAgIDxw
cmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogPC9ib2R5PgogPC9odG1sPgotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9s
bGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBv
c2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQt
YW5jZXN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4YzEwZGJhMWY4YWJhY2E0ZGYyOTEz
MTlhZjJlMmNiNzY3YTY5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3Np
dGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFu
Y2VzdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1Bhc3NlZCAtIGxheWVyIHRyZWUu
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRv
LWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3IuaHRtbCBiL0xheW91dFRl
c3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBv
c2l0aW9uZWQtYW5jZXN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDIwNWFlOWRhYzU1NDBhOThlMGJi
ZGQ1MDI4OGQzNjQ3ZDNjMDUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9z
aXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1h
bmNlc3Rvci5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0v
L1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgImh0dHA6Ly93d3cudzMu
b3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8
bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNl
dD11dGYtOCIvPgorICA8dGl0bGU+T3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmc8L3Rp
dGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIC5jb250
YWluZXIgeworICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICAg
IG92ZXJmbG93OiBzY3JvbGw7CisgICAgICBtYXJnaW46IDIwcHg7CisgICAgICBib3JkZXI6IDFw
eCBzb2xpZCBibGFjazsKKyAgICB9CisKKyAgICAuc2Nyb2xsZWQgeworICAgICAgd2lkdGg6IDE4
MHB4OworICAgICAgaGVpZ2h0OiA5MHB4OworICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogZ3JheTsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB9CisK
KyAgICAucG9zaXRpb25lZCB7CisgICAgICB3aWR0aDogMTIwcHg7CisgICAgICBoZWlnaHQ6IDI0
MHB4OworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIH0KKworICAgICNmaXJzdENoaWxk
IHsKKyAgICAgIHotaW5kZXg6IDE7CisgICAgfQorCisgICAgI3NlY29uZENoaWxkIHsKKyAgICAg
IHotaW5kZXg6IDI7CisgICAgfQorCisgICAgI3ByZWRlY2Vzc29yIHsKKyAgICAgIGxlZnQ6IDIw
cHg7CisgICAgICB0b3A6IDIwcHg7CisgICAgICB6LWluZGV4OiAwOworICAgICAgYmFja2dyb3Vu
ZC1jb2xvcjogZ3JlZW47CisgICAgfQorCisgICAgI2FuY2VzdG9yIHsKKyAgICAgIGJhY2tncm91
bmQtY29sb3I6IGJsdWU7CisgICAgfQorCisgIDwvc3R5bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgdmFyIGRlYnVnTW9kZSA9IGZhbHNl
OworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CisKKyAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgIHdpbmRvdy5pbnRlcm5h
bHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5h
YmxlZCh0cnVlKTsKKworICAgIGZ1bmN0aW9uIHdyaXRlKHN0cikKKyAgICB7CisgICAgICB2YXIg
cHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICAgIHZhciB0ZXh0
ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyICsgJ1xuJyk7CisgICAgICBwcmUuYXBwZW5k
Q2hpbGQodGV4dCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAg
ICB2YXIgcHJlZGVjZXNzb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlZGVjZXNzb3In
KTsKKyAgICAgIHZhciBhbmNlc3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmNlc3Rv
cicpOworICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250
YWluZXInKTsKKyAgICAgIHZhciBmaXJzdENoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2ZpcnN0Q2hpbGQnKTsKKyAgICAgIHZhciBzZWNvbmRDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdzZWNvbmRDaGlsZCcpOworCisgICAgICAvLyBGb3JjZSBhIHN0eWxlIHJlY2FsYy4K
KyAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICBpZiAod2luZG93LmludGVy
bmFscykgeworICAgICAgICAvLyBGb3JjZSBhIGxheW91dC4KKyAgICAgICAgd2luZG93LmludGVy
bmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOworICAgICAgICB2YXIgbGF5ZXJUcmVlID0gd2lu
ZG93LmludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQpOworCisgICAgICAgIGlmICgh
bGF5ZXJUcmVlKQorICAgICAgICAgIHdyaXRlKCdGQUlMRUQgLSBubyBsYXllciB0cmVlLicpCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICB3cml0ZSgnUGFzc2VkIC0gbGF5ZXIgdHJlZS4nKQorCisg
ICAgICAgIGlmIChsYXllclRyZWUgJiYgZGVidWdNb2RlKQorICAgICAgICAgICAgd3JpdGUobGF5
ZXJUcmVlKTsKKyAgICAgIH0KKyAgICB9IC8vIGZ1bmN0aW9uIGRvVGVzdAorCisgICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgPC9zY3JpcHQ+Cis8
L2hlYWQ+CisKKzxib2R5PgorICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0icHJlZGVjZXNz
b3IiPjwvZGl2PgorICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0iYW5jZXN0b3IiPgorICAg
IDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgaWQ9ImNvbnRhaW5lciI+CisgICAgICA8ZGl2IGNsYXNz
PSJzY3JvbGxlZCIgaWQ9ImZpcnN0Q2hpbGQiPjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ic2Ny
b2xsZWQiIGlkPSJzZWNvbmRDaGlsZCI+PC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorICA8
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDQ2YjFlOWJjNWNjOTlm
ZGUzOTdhYzc4ZjEwZmViMDQ1NmVmOWYwZDcuLjcxNDdiMTExNmMzNzkzNjZhZGRhNjJmZjgzYmE5
OTEzOTg5NWIyMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4
cGVjdGF0aW9ucwpAQCAtMzcwNCw2ICszNzA0LDEzIEBAIHdlYmtpdC5vcmcvYi8xMDMxNTYgcGxh
dGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9zY3JvbGxiYXJz
CiAjIFJlcXVpcmVzIGFuIHVwZGF0ZWQgYmFzZWxpbmUgYWZ0ZXIgMTA2MTQyLgogd2Via2l0Lm9y
Zy9iLzEwNjgyMCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9jb21wb3NpdGVkc2Nyb2xs
aW5nL292ZXJmbG93L292ZXJmbG93LXNjcm9sbC5odG1sIFsgRmFpbHVyZSBdCiAKKyMgTmVlZHMg
cmViYXNlbGluZSBhZnRlciAxMDkzMDIuCit3ZWJraXQub3JnL2IvMTA5OTY1IHBsYXRmb3JtL2No
cm9taXVtL3ZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcvb3ZlcmZsb3cvdGV4dGFyZWEt
c2Nyb2xsLXRvdWNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xMDk5NjUgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nL292ZXJmbG93L3RleHRhcmVh
LXNjcm9sbC10b3VjaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTA5OTY1IHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcvc2Nyb2xsYmFycy9v
dmVyZmxvdy1zY3JvbGxiYXItY29tYmluYXRpb25zLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8xMDk5NjUgY29tcG9zaXRpbmcvb3ZlcmZsb3cvdGV4dGFyZWEtc2Nyb2xsLXRvdWNoLmh0
bWwgWyBGYWlsdXJlIF0KKworCiAjIEZhaWxzIGR1ZSB0byBCdWcgODU4NTYuCiB3ZWJraXQub3Jn
L2IvODU4NTYgWyBXaW4gTWFjIEFuZHJvaWQgXSBmYXN0L2Jsb2NrL2Zsb2F0LzAyOC5odG1sIFsg
SW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODU4NTYgWyBXaW4gTWFjIEFuZHJvaWQg
XSBmYXN0L2Jsb2NrL2Zsb2F0LzAyNi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190760</attachid>
            <date>2013-02-28 11:16:37 -0800</date>
            <delta_ts>2013-03-04 07:08:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130228141249.patch</filename>
            <type>text/plain</type>
            <size>51241</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTBkNmRhYWU2MWNiNjY3
MmE0NzhiNWRkYTZmZTVlOTgwZjBjNzE1My4uMzQzMzI4MGM5MjI0NWI1OWVmZWJlYTU0N2FmZjM2
MmRiZThiMmM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAyLTI3ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBJZiB0aGUgdHdvIGxpc3RzIGFy
ZSBpbiBmYWN0IHRoZSBzYW1lLCB0aGVuCisgICAgICAgIHdlIGtub3cgaXQgaXMgc2FmZSB0byBw
cm9tb3RlIHRoZSBsYXllciB0byBiZSBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhpcworICAgICAg
ICBzaG91bGQgYmUgbW9yZSBpbnR1aXRpdmUgYW5kIG1vcmUgcm9idXN0IHRoYW4gdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cv
b3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sCisg
ICAgICAgIFRlc3Q6IGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8t
Y29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6Cisg
ICAgICAgIFJlbmFtZWQgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIg
LT4KKyAgICAgICAgbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ2NvbnRhaW5lcgorICAgICAgICAo
V2ViQ29yZTo6aXNQb3NpdGlvbmVkQ29udGFpbmVyKToKKyAgICAgICAgTW92ZWQgaGlnaGVyIHVw
IGluIHRoZSBmaWxlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRT
dGFja2luZ09yZGVyRWxlbWVudEF0KToKKyAgICAgICAgR2V0IFJlbmRlckxheWVyIGF0IHN0YWNr
aW5nIG9yZGVyIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNh
bkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAgICBDb21wdXRlIHdoZXRoZXIgdGhlIGN1cnJl
bnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRvIGEgc3RhY2tpbmcKKyAgICAgICAgY29udGFpbmVy
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250
YWluZXJSZWN1cnNpdmVseSk6CisgICAgICAgIENvbXB1dGUgd2hldGhlciBhbGwgY2hpbGQgbGF5
ZXJzIGNhbiBiZSBwcm9tb3RlZCB0byBzdGFja2luZworICAgICAgICBjb250YWluZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAg
ICAgICBSZW5hbWVkIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyIC0+
CisgICAgICAgIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWluZXIKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVJc05vcm1hbEZsb3dPbmx5KToKKyAgICAgICAgUmVm
YWN0b3JlZCBsb2dpYyBmcm9tIHN0eWxlQ2hhbmdlZCB0byByZWZyZXNoIHRoZSBpc05vcm1hbEZs
b3dPbmx5CisgICAgICAgIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcpOgorICAgICAgICBBZGRlZCBjYWxsIHRvIHVwZGF0
ZUlzTm9ybWFsRmxvd09ubHkoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVMYXllckxpc3RzSWZOZWVkZWQpOgorICAgICAgICBVcGRhdGVkIHRvIGNhbGwgdXBkYXRlQ2Fu
QmVTdGFja2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KCkgaW5zdGVhZCBvZgorICAgICAgICB1cGRh
dGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5n
ZSk6CisgICAgICAgIFNtYWxsIGNvcnJlY3RuZXNzIGZpeDogaXNTdGFja2luZ0NvbnRleHQgY29u
ZGl0aW9ucyBzaG91bGQgYmUKKyAgICAgICAgaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2lu
Z0NvbnRhaW5lcigpCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAg
IChSZW5kZXJMYXllcik6CisKIDIwMTMtMDItMjUgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5IHByb3BlcnR5IGRvZXNuJ3Qg
YWNjZXB0ICJhbGwsIDxJREVOVD4iLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKaW5kZXggZTRjYTYwOTYyNWQ2MzhmMzQ3MDgwN2E4OWIyMTVlMTI5NTliZmY2ZS4uNjJj
NDMxZDBjZjZkODVjYjA0OGY5NzUxYTc1M2Y2NjBjM2U5ODVmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgUmVuZGVyTGF5ZXI6
OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVyKQogICAgICwgbV9o
YXNPdXRPZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzT3V0T2ZG
bG93UG9zaXRpb25lZERlc2NlbmRhbnREaXJ0eSh0cnVlKQogICAgICwgbV9uZWVkc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoZmFsc2UpCi0gICAgLCBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3Rh
Y2tpbmdPcmRlcihmYWxzZSkKKyAgICAsIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWlu
ZXIoZmFsc2UpCiAgICAgLCBtX2lzUm9vdExheWVyKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkK
ICAgICAsIG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkKICAgICAsIG1fcGFpbnRpbmdJbnNpZGVS
ZWZsZWN0aW9uKGZhbHNlKQpAQCAtNTI4LDE2MyArNTI4LDIyNSBAQCBib29sIFJlbmRlckxheWVy
OjphY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkgY29uc3QK
ICAgICAgICAgJiYgcmVuZGVyZXIoKS0+ZnJhbWUoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCk7CiB9CiAKLS8vIElm
IHdlIGFyZSBhIHN0YWNraW5nIGNvbnRhaW5lciwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgZGV0
ZXJtaW5lIGlmIG91cgotLy8gZGVzY2VuZGFudHMgZm9yIGEgY29udGlndW91cyBibG9jayBpbiBz
dGFja2luZyBvcmRlci4gVGhpcyBpcyByZXF1aXJlZCBpbgotLy8gb3JkZXIgZm9yIGFuIGVsZW1l
bnQgdG8gYmUgc2FmZWx5IHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVyLiBJdCBpcyBz
YWZlCi0vLyB0byBiZWNvbWUgYSBzdGFja2luZyBjb250YWluZXIgaWYgdGhpcyBjaGFuZ2Ugd291
bGQgbm90IGFsdGVyIHRoZSBzdGFja2luZwotLy8gb3JkZXIgb2YgbGF5ZXJzIG9uIHRoZSBwYWdl
LiBUaGF0IGNhbiBvbmx5IGhhcHBlbiBpZiBhIG5vbi1kZXNjZW5kYW50IGFwcGVhcgotLy8gYmV0
d2VlbiB1cyBhbmQgb3VyIGRlc2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLiBIZXJlJ3MgYW4g
ZXhhbXBsZToKLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMKLS8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICB8ICBcLgotLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQSAgIEIgICBDCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC9cICAgfCAgIC9cLgotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLTggIEQg
IDIgIDcKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotLy8KLS8vIEkndmUgbGFiZWxlZCBvdXIgbm9y
bWFsIGZsb3cgZGVzY2VuZGFudHMgQSwgQiwgQywgYW5kIEQsIG91ciBzdGFja2luZwotLy8gY29u
dGFpbmVyIGRlc2NlbmRhbnRzIHdpdGggdGhlaXIgeiBpbmRpY2VzLCBhbmQgdXMgd2l0aCAndGhp
cycgKHdlJ3JlIGEKLS8vIHN0YWNraW5nIGNvbnRhaW5lciBhbmQgb3VyIHpJbmRleCBkb2Vzbid0
IG1hdHRlciBoZXJlKS4gVGhlc2Ugbm9kZXMgYXBwZWFyIGluCi0vLyB0aHJlZSBsaXN0czogcG9z
Wk9yZGVyLCBuZWdaT3JkZXIsIGFuZCBub3JtYWwgZmxvdyAoa2VlcCBpbiBtaW5kIHRoYXQgbm9y
bWFsCi0vLyBmbG93IGxheWVycyBkb24ndCBvdmVybGFwKS4gU28gaWYgd2UgYXJyYW5nZSB0aGVz
ZSBsaXN0cyBpbiBvcmRlciB3ZSBnZXQgb3VyCi0vLyBzdGFja2luZyBvcmRlcjoKLS8vCi0vLyAg
ICAgICAgICAgICAgICAgICAgIFstOF0sIFtBLURdLCBbMCwgMiwgNSwgN10tLT4gcG9zIHotb3Jk
ZXIuCi0vLyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAotLy8gICAgICAgIE5lZyB6LW9y
ZGVyLiA8LSsgICAgICstLT4gTm9ybWFsIGZsb3cgZGVzY2VuZGFudHMuCi0vLwotLy8gV2UgY2Fu
IHRoZW4gYXNzaWduIG5ldywgJ3N0YWNraW5nJyBvcmRlciBpbmRpY2VzIHRvIHRoZXNlIGVsZW1l
bnRzIGFzIGZvbGxvd3M6Ci0vLwotLy8gICAgICAgICAgICAgICAgICAgICBbLThdLCBbQS1EXSwg
WzAsIDIsIDUsIDddCi0vLyAnU3RhY2tpbmcnIGluZGljZXM6ICAtMSAgICAgMCAgICAgMSAgMiAg
MyAgNAotLy8KLS8vIE5vdGUgdGhhdCB0aGUgbm9ybWFsIGZsb3cgZGVzY2VuZGFudHMgY2FuIHNo
YXJlIGFuIGluZGV4IGJlY2F1c2UgdGhleSBkb24ndAotLy8gc3RhY2svb3ZlcmxhcC4gTm93IG91
ciBwcm9ibGVtIGJlY29tZXMgdmVyeSBzaW1wbGU6IGEgbGF5ZXIgY2FuIHNhZmVseSBiZWNvbWUK
LS8vIGEgc3RhY2tpbmcgY29udGFpbmVyIGlmIHRoZSBzdGFja2luZy1vcmRlciBpbmRpY2VzIG9m
IGl0IGFuZCBpdHMgZGVzY2VuZGFudHMKLS8vIGFwcGVhciBpbiBhIGNvbnRpZ3VvdXMgYmxvY2sg
aW4gdGhlIGxpc3Qgb2Ygc3RhY2tpbmcgaW5kaWNlcy4gVGhpcyBwcm9ibGVtCi0vLyBjYW4gYmUg
c29sdmVkIHZlcnkgZWZmaWNpZW50bHkgYnkgY2FsY3VsYXRpbmcgdGhlIG1pbi9tYXggc3RhY2tp
bmcgaW5kaWNlcyBpbgotLy8gdGhlIHN1YnRyZWUsIGFuZCB0aGUgbnVtYmVyIHN0YWNraW5nIGNv
bnRhaW5lciBkZXNjZW5kYW50cy4gT25jZSB3ZSBoYXZlIHRoaXMKLS8vIGluZm9ybWF0aW9uLCB3
ZSBrbm93IHRoYXQgdGhlIHN1YnRyZWUncyBpbmRpY2VzIGZvcm0gYSBjb250aWd1b3VzIGJsb2Nr
IGlmOgotLy8KLS8vICAgICAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBu
dW1TQ0Rlc2NlbmRhbnRzCi0vLwotLy8gU28gZm9yIG5vZGUgQSBpbiB0aGUgZXhhbXBsZSBhYm92
ZSB3ZSB3b3VsZCBoYXZlOgotLy8gICBtYXhTdGFja0luZGV4ID0gMQotLy8gICBtaW5TdGFja0lu
ZGV4ID0gLTEKLS8vICAgbnVtU0NEZWNlbmRhbnRzID0gMgotLy8KLS8vIGFuZCBzbywKLS8vICAg
ICAgIG1heFN0YWNrSW5kZXggLSBtaW5TdGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMKLS8v
ICA9PT0+ICAgICAgICAgICAgICAgICAgICAgIDEgLSAoLTEpID09IDIKLS8vICA9PT0+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyID09IDIKLS8vCi0vLyAgU2luY2UgdGhpcyBpcyB0cnVl
LCBBIGNhbiBzYWZlbHkgYmVjb21lIGEgc3RhY2tpbmcgY29udGFpbmVyLgotLy8gIE5vdywgZm9y
IG5vZGUgQyB3ZSBoYXZlOgorc3RhdGljIGlubGluZSBib29sIGlzUG9zaXRpb25lZENvbnRhaW5l
cihjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogbGF5ZXJSZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOworICAgIHJldHVybiBsYXllci0+
aXNSb290TGF5ZXIoKSB8fCBsYXllclJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+
aGFzVHJhbnNmb3JtKCk7Cit9CisKK2VudW0gU3RhY2tpbmdPcmRlckRpcmVjdGlvbiB7RnJvbVJp
Z2h0LCBGcm9tTGVmdH07CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRlQ2FuQmVTdGFj
a2luZ0NvbnRhaW5lciB0byBzaW1wbGlmeSBpbmRleGluZyBpbnRvCisvLyB0aGUgcG9zaXRpdmUg
YW5kIG5lZ2F0aXZlIHotb3JkZXIgbGlzdHMsIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlbSBi
b3RoCisvLyBmcm9tIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQuCitzdGF0aWMgY29u
c3QgUmVuZGVyTGF5ZXIqIGdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQoY29uc3QgVmVjdG9yPFJl
bmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiBu
ZWdaT3JkZXJMaXN0LCBjb25zdCBTdGFja2luZ09yZGVyRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3Qgc2l6ZV90IGluZGV4KQoreworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZSA9IG5lZ1pP
cmRlckxpc3QgPyBuZWdaT3JkZXJMaXN0LT5zaXplKCkgOiAwOworCisgICAgaWYgKGRpcmVjdGlv
biA9PSBGcm9tTGVmdCkgeworICAgICAgICBpZiAoaW5kZXggPCBuZWdaT3JkZXJMaXN0U2l6ZSkK
KyAgICAgICAgICAgIHJldHVybiBuZWdaT3JkZXJMaXN0LT5hdChpbmRleCk7CisKKyAgICAgICAg
cmV0dXJuIHBvc1pPcmRlckxpc3QtPmF0KGluZGV4IC0gbmVnWk9yZGVyTGlzdFNpemUpOworICAg
IH0KKworICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QgPyBwb3Na
T3JkZXJMaXN0LT5zaXplKCkgOiAwOworCisgICAgaWYgKGluZGV4IDwgcG9zWk9yZGVyTGlzdFNp
emUpCisgICAgICAgIHJldHVybiBwb3NaT3JkZXJMaXN0LT5hdChwb3NaT3JkZXJMaXN0U2l6ZSAt
IGluZGV4IC0gMSk7CisKKyAgICByZXR1cm4gbmVnWk9yZGVyTGlzdC0+YXQobmVnWk9yZGVyTGlz
dFNpemUgLSAocG9zWk9yZGVyTGlzdFNpemUgLSBpbmRleCkgLSAxKTsKK30KKworLy8gRGV0ZXJt
aW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRvIGEgc3RhY2tp
bmcgY29udGFpbmVyLAorLy8gZ2l2ZW4gaXRzIGNsb3Nlc3Qgc3RhY2tpbmcgY29udGV4dCBhbmNl
c3Rvci4gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgd2hhdAorLy8gcG9zaXRpdmUgYW5kIG5lZ2F0
aXZlIHotb3JkZXIgbGlzdHMgd291bGQgbG9vayBsaWtlIGJlZm9yZSBhbmQgYWZ0ZXIKKy8vIHBy
b21vdGlvbiwgYW5kIGVuc3VyaW5nIHRoYXQgcHJvcGVyIHN0YWNraW5nIG9yZGVyIGlzIHByZXNl
cnZlZCBiZXR3ZWVuIHRoZQorLy8gdHdvIHNldHMgb2YgbGlzdHMuCiAvLwotLy8gICBtYXhTdGFj
a0luZGV4ID0gNAotLy8gICBtaW5TdGFja0luZGV4ID0gMCA8LS0gYmVjYXVzZSBDIGhhcyBzdGFj
a2luZyBpbmRleCAwLgotLy8gICBudW1TQ0RlY2VuZGFudHMgPSAyCisvLyBXZSB0YWtlIGEgcmF0
aGVyIGhlYXZ5LWhhbmRlZCByb2J1c3QgYXBwcm9hY2ggZHVlIHRvIGEgZmV3IGVhc3ktdG8tbWlz
cyBlZGdlCisvLyBjYXNlcyB3aGljaCBoYXZlIGNhdXNlZCB1cyB0byBtYWtlIGluY29ycmVjdCBv
cHQtaW4gZGVjaXNpb25zIGluIHRoZSBwYXN0LgogLy8KLS8vIGFuZCBzbywKLS8vICAgICAgIG1h
eFN0YWNrSW5kZXggLSBtaW5TdGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMKLS8vICA9PT0+
ICAgICAgICAgICAgICAgICAgICAgICAgIDQgLSAwID09IDIKLS8vICA9PT0+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0ID09IDIKKy8vIEEgZmV3IGV4YW1wbGVzOgorLy8gYyA9IGN1cnJl
bnRMYXllcgorLy8gLSA9IG5lZ2F0aXZlIHotb3JkZXIgY2hpbGQgb2YgY3VycmVudExheWVyCisv
LyArID0gcG9zaXRpdmUgei1vcmRlciBjaGlsZCBvZiBjdXJyZW50TGF5ZXIKKy8vIGEgPSBwb3Np
dGlvbmVkIGFuY2VzdG9yIG9mIGN1cnJlbnRMYXllcgorLy8geCA9IGFueSBvdGhlciBSZW5kZXJM
YXllciBpbiB0aGUgbGlzdAogLy8KLS8vIFNpbmNlIHRoaXMgaXMgZmFsc2UsIEMgY2Fubm90IGJl
IHNhZmVseSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhpcwotLy8gaGFwcGVu
ZWQgYmVjYXVzZSBvZiB0aGUgZWxlbWVudHMgd2l0aCB6LWluZGV4IDUgYW5kIDAuIE5vdyBpZiA1
IGhhZCBiZWVuIGEKLS8vIGNoaWxkIG9mIEMgcmF0aGVyIHRoYW4gRCwgYW5kIEEgaGFkIG5vIGNo
aWxkIHdpdGggWiBpbmRleCAwLCB3ZSB3b3VsZCBoYXZlIGhhZDoKKy8vIChhKSB4eHh4eC0tLS0t
KythKysreAorLy8gKGIpIHh4eC0tLS0tYysrKysrK3h4CiAvLwotLy8gICBtYXhTdGFja0luZGV4
ID0gMwotLy8gICBtaW5TdGFja0luZGV4ID0gMCA8LS0gYmVjYXVzZSBDIGhhcyBzdGFja2luZyBp
bmRleCAwLgotLy8gICBudW1TQ0RlY2VuZGFudHMgPSAzCiAvLwotLy8gYW5kIHNvLAotLy8gICAg
ICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50cwotLy8g
ID09PT4gICAgICAgICAgICAgICAgICAgICAgICAgMyAtIDAgPT0gMwotLy8gID09PT4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMgPT0gMworLy8gTm9ybWFsbHkgdGhlIGN1cnJlbnQgbGF5
ZXIgd291bGQgYmUgcGFpbnRlZCBpbiB0aGUgbm9ybWFsIGZsb3cgbGlzdCBpZiBpdAorLy8gZG9l
c24ndCBhbHJlYWR5IGFwcGVhciBpbiB0aGUgcG9zaXRpdmUgei1vcmRlciBsaXN0LiBIb3dldmVy
LCBpbiB0aGUgY2FzZQorLy8gdGhhdCB0aGUgbGF5ZXIgaGFzIGEgcG9zaXRpb25lZCBhbmNlc3Rv
ciwgaXQgd2lsbCBwYWludCBkaXJlY3RseSBhZnRlciB0aGUKKy8vIHBvc2l0aW9uZWQgYW5jZXN0
b3IuIEluIGV4YW1wbGUgKGEpLCB0aGUgY3VycmVudCBsYXllciB3b3VsZCBiZSBwYWludGVkIGlu
CisvLyB0aGUgbWlkZGxlIG9mIGl0cyBvd24gcG9zaXRpdmUgei1vcmRlciBjaGlsZHJlbiwgc28g
cHJvbW90aW5nIHdvdWxkIGNhdXNlIGEKKy8vIGNoYW5nZSBpbiBwYWludCBvcmRlciAoc2luY2Ug
YSBwcm9tb3RlZCBsYXllciB3aWxsIHBhaW50IGFsbCBvZiBpdHMgcG9zaXRpdmUKKy8vIHotb3Jk
ZXIgY2hpbGRyZW4gc3RyaWN0bHkgYWZ0ZXIgaXQgcGFpbnRzIGl0c2VsZikuCiAvLwotLy8gIEFu
ZCB3ZSB3b3VsZCBjb25jbHVkZSB0aGF0IEMgY291bGQgYmUgcHJvbW90ZWQuCi12b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKQot
ewotICAgIGlmICghaXNTdGFja2luZ0NvbnRleHQoKSB8fCAhYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpKQorLy8gSW4gZXhhbXBsZSAoYiksIGl0IGlzIG9r
IHRvIHByb21vdGUgdGhlIGN1cnJlbnQgbGF5ZXIgb25seSBpZiBpdCBkb2VzIG5vdAorLy8gaGF2
ZSBhIGJhY2tncm91bmQuIElmIGl0IGhhcyBhIGJhY2tncm91bmQsIHRoZSBiYWNrZ3JvdW5kIGdl
dHMgcGFpbnRlZCBiZWZvcmUKKy8vIHRoZSBsYXllcidzIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRy
ZW4sIHNvIGFnYWluLCBhIHByb21vdGlvbiB3b3VsZCBjYXVzZSBhCisvLyBjaGFuZ2UgaW4gcGFp
bnQgb3JkZXIgKGNhdXNpbmcgdGhlIGJhY2tncm91bmQgdG8gZ2V0IHBhaW50ZWQgYWZ0ZXIgdGhl
CisvLyBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxkcmVuIGluc3RlYWQgb2YgYmVmb3JlKS4KK3ZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIoUmVuZGVyTGF5ZXIqIGFu
Y2VzdG9yU3RhY2tpbmdDb250ZXh0KQoreworICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7Ci0g
ICAgQVNTRVJUKCFtX3pPcmRlckxpc3RzRGlydHkpOworICAgIC8vIEZJWE1FOiBXZSBjYW4gZWFy
bHktb3V0IG9mIHRoaXMgZnVuY3Rpb24gbW9yZQorICAgIC8vIG9mdGVuIGlmIHdlIG1haW50YWlu
IGEgZGlydHkgYml0IGZvciB0aGUKKyAgICAvLyBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29u
dGFpbmVyIHByb3BlcnR5CisgICAgLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDk5NjYpCiAKLSAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3Na
T3JkZXJMaXN0OwotICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pPcmRlckxp
c3Q7Ci0gICAgcmVidWlsZFpPcmRlckxpc3RzKFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIHBvc1pP
cmRlckxpc3QsIG5lZ1pPcmRlckxpc3QpOworICAgIHVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CiAK
LSAgICAvLyBDcmVhdGUgYSByZXZlcnNlIGxvb2t1cC4KLSAgICBIYXNoTWFwPGNvbnN0IFJlbmRl
ckxheWVyKiwgaW50PiBsb29rdXA7CisgICAgQVNTRVJUKCFtX25vcm1hbEZsb3dMaXN0RGlydHkp
OwogCi0gICAgaWYgKG5lZ1pPcmRlckxpc3QpIHsKLSAgICAgICAgaW50IHN0YWNraW5nT3JkZXJJ
bmRleCA9IC0xOwotICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAg
ICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1cnJlbnRMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGxp
c3RTaXplIC0gaSAtIDEpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50TGF5ZXItPmlzU3RhY2tp
bmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBsb29r
dXAuc2V0KGN1cnJlbnRMYXllciwgc3RhY2tpbmdPcmRlckluZGV4LS0pOwotICAgICAgICB9Ci0g
ICAgfQorICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IHBvc1pPcmRlckxpc3RCZWZv
cmVQcm9tb3RlOworICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pPcmRlckxp
c3RCZWZvcmVQcm9tb3RlOworICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IHBvc1pP
cmRlckxpc3RBZnRlclByb21vdGU7CisgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4g
bmVnWk9yZGVyTGlzdEFmdGVyUHJvbW90ZTsKIAotICAgIGlmIChwb3NaT3JkZXJMaXN0KSB7Ci0g
ICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKLSAgICAgICAg
aW50IHN0YWNraW5nT3JkZXJJbmRleCA9IDE7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1cnJlbnRMYXll
ciA9IHBvc1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50TGF5ZXIt
PmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBsb29rdXAuc2V0KGN1cnJlbnRMYXllciwgc3RhY2tpbmdPcmRlckluZGV4KyspOworICAg
IC8vIFdlIGNhbid0IHVzZSBUZW1wb3JhcnlDaGFuZ2U8PiBoZXJlIHNpbmNlIG1fbmVlZHNDb21w
b3NpdGVkU2Nyb2xsaW5nIGFuZAorICAgIC8vIG1faXNOb3JtYWxGbG93T25seSBhcmUgYm90aCBi
aXRmaWVsZHMsIHNvIHdlIGhhdmUgdG8gZG8gaXQgdGhlCisgICAgLy8gb2xkLWZhc2hpb25lZCB3
YXkuCisgICAgYm9vbCBvbGROZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX25lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZzsKKyAgICBib29sIG9sZElzTm9ybWFsRmxvd09ubHkgPSBtX2lzTm9ybWFs
Rmxvd09ubHk7CisKKyAgICAvLyBTZXQgdGhlIGZsYWcgb24gdGhlIGN1cnJlbnQgbGF5ZXIsIHRo
ZW4gcmVidWlsZCBhbmNlc3RvciBzdGFja2luZworICAgIC8vIGNvbnRleHQncyBsaXN0cy4gVGhp
cyB3YXksIHdlIGNhbiBzZWUgdGhlIGV4YWN0IGVmZmVjdHMgdGhhdCBwcm9tb3RpbmcKKyAgICAv
LyB0aGlzIGxheWVyIHdvdWxkIGNhdXNlLgorICAgIG1faXNOb3JtYWxGbG93T25seSA9IHRydWU7
CisgICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBmYWxzZTsKKyAgICBhbmNlc3RvclN0
YWNraW5nQ29udGV4dC0+cmVidWlsZFpPcmRlckxpc3RzKFN0b3BBdFN0YWNraW5nQ29udGFpbmVy
cywgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUsIG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3Rl
KTsKKworICAgIG1faXNOb3JtYWxGbG93T25seSA9IGZhbHNlOworICAgIG1fbmVlZHNDb21wb3Np
dGVkU2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICBhbmNlc3RvclN0YWNraW5nQ29udGV4dC0+cmVidWls
ZFpPcmRlckxpc3RzKFN0b3BBdFN0YWNraW5nQ29udGFpbmVycywgcG9zWk9yZGVyTGlzdEFmdGVy
UHJvbW90ZSwgbmVnWk9yZGVyTGlzdEFmdGVyUHJvbW90ZSk7CisKKyAgICBtX25lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZyA9IG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZzsKKyAgICBtX2lzTm9y
bWFsRmxvd09ubHkgPSBvbGRJc05vcm1hbEZsb3dPbmx5OworCisgICAgc2l6ZV90IHBvc1pPcmRl
ckxpc3RTaXplQmVmb3JlUHJvbW90ZSA9IHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlID8gcG9z
Wk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPnNpemUoKSA6IDA7CisgICAgc2l6ZV90IG5lZ1pPcmRl
ckxpc3RTaXplQmVmb3JlUHJvbW90ZSA9IG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlID8gbmVn
Wk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPnNpemUoKSA6IDA7CisgICAgc2l6ZV90IHBvc1pPcmRl
ckxpc3RTaXplQWZ0ZXJQcm9tb3RlID0gcG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZSA/IHBvc1pP
cmRlckxpc3RBZnRlclByb21vdGUtPnNpemUoKSA6IDA7CisgICAgc2l6ZV90IG5lZ1pPcmRlckxp
c3RTaXplQWZ0ZXJQcm9tb3RlID0gbmVnWk9yZGVyTGlzdEFmdGVyUHJvbW90ZSA/IG5lZ1pPcmRl
ckxpc3RBZnRlclByb21vdGUtPnNpemUoKSA6IDA7CisKKyAgICBib29sIGhhc0JhY2tncm91bmQg
PSByZW5kZXJlcigpLT5oYXNCYWNrZ3JvdW5kKCk7CisgICAgYm9vbCB3ZUFyZVBvc2l0aW9uZWQg
PSByZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKTsKKworICAgIGNvbnN0IFJlbmRlckxheWVyKiBw
b3NpdGlvbmVkQW5jZXN0b3IgPSBwYXJlbnQoKTsKKyAgICB3aGlsZSAocG9zaXRpb25lZEFuY2Vz
dG9yICYmICFpc1Bvc2l0aW9uZWRDb250YWluZXIocG9zaXRpb25lZEFuY2VzdG9yKSAmJiAhcG9z
aXRpb25lZEFuY2VzdG9yLT5pc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICBwb3NpdGlvbmVk
QW5jZXN0b3IgPSBwb3NpdGlvbmVkQW5jZXN0b3ItPnBhcmVudCgpOworICAgIGlmIChwb3NpdGlv
bmVkQW5jZXN0b3IgJiYgKCFpc1Bvc2l0aW9uZWRDb250YWluZXIocG9zaXRpb25lZEFuY2VzdG9y
KSB8fCBwb3NpdGlvbmVkQW5jZXN0b3ItPmlzU3RhY2tpbmdDb250ZXh0KCkpKQorICAgICAgICBw
b3NpdGlvbmVkQW5jZXN0b3IgPSAwOworCisgICAgLy8gSW5zZXJ0IHRoaXMgaW50byB0aGUgcG9z
Wk9yZGVyaXN0QmVmb3JlUHJvbW90ZSBkaXJlY3RseSBhZnRlciB0aGUKKyAgICAvLyBwb3NpdGlv
bmVkIGFuY2VzdG9yLCBpZiB0aGVyZSBpcyBvbmUuIE90aGVyd2lzZSwgYWRkIGl0IHRvIHRoZSB2
ZXJ5CisgICAgLy8gYmVnaW5uaW5nLgorICAgIC8vCisgICAgLy8gV2UgZG8gdGhpcyB0byBtYWtl
IHRoZSBjb21wYXJpc29uIHNpbXBsZSBsYXRlciwgd2hlbiB3ZSBjb21wYXJlIHRoaXMgdG8KKyAg
ICAvLyB0aGUgcG9zdC1wcm9tb3Rpb24gcGFpbnQgb3JkZXIuIElmIHRoZSBjdXJyZW50IGxheWVy
IGlzIG5vdCBwb3NpdGlvbmVkLAorICAgIC8vIGl0IHdvbid0IGV4aXN0IGluIHRoZSBwcmUtcHJv
bW90aW9uIHBhaW50IGxpc3QsIHNvIGFkZGluZyBpdCBpbiB0byBpdHMKKyAgICAvLyBwcm9wZXIg
cGFpbnRpbmcgbG9jYXRpb24gaGVyZSBzaW1wbGlmaWVzIHRoZSBsb2dpYyBsYXRlci4KKyAgICBp
ZiAoIXdlQXJlUG9zaXRpb25lZCkgeworICAgICAgICBpZiAoIXBvc2l0aW9uZWRBbmNlc3Rvcikg
eworICAgICAgICAgICAgaWYgKCFwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSkKKyAgICAgICAg
ICAgICAgICBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
UmVuZGVyTGF5ZXIqPigpKTsKKworICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21v
dGUtPnByZXBlbmQodGhpcyk7CisgICAgICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVBy
b21vdGUrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGU7IGluZGV4KyspIHsK
KyAgICAgICAgICAgICAgICBpZiAocG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPmF0KGluZGV4
KSA9PSBwb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVy
TGlzdEJlZm9yZVByb21vdGUtPmluc2VydChpbmRleCArIDEsIHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUrKzsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogCi0gICAgaW50IG1pbkluZGV4ID0gMDsKLSAgICBpbnQgbWF4SW5kZXggPSAwOwot
ICAgIGludCBjb3VudCA9IDA7Ci0gICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7Ci0gICAg
dXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyUmVjdXJzaXZlKGxv
b2t1cCwgbWluSW5kZXgsIG1heEluZGV4LCBjb3VudCwgZmlyc3RJdGVyYXRpb24pOwotfQorICAg
IHNpemVfdCBzaXplQmVmb3JlUHJvbW90ZSA9IHBvc1pPcmRlckxpc3RTaXplQmVmb3JlUHJvbW90
ZSArIG5lZ1pPcmRlckxpc3RTaXplQmVmb3JlUHJvbW90ZTsKKyAgICBzaXplX3Qgc2l6ZUFmdGVy
UHJvbW90ZSA9IHBvc1pPcmRlckxpc3RTaXplQWZ0ZXJQcm9tb3RlICsgbmVnWk9yZGVyTGlzdFNp
emVBZnRlclByb21vdGU7CisKKyAgICBib29sIGNhblByb21vdGUgPSB0cnVlOworCisgICAgLy8g
VGhlIGxheWVyIGxpc3RzIGNhbiBjb25jZXB0dWFsbHkgYmUgZGl2aWRlZCBpbnRvIDMgcGFydHM6
CisgICAgLy8KKyAgICAvLyAoYSkgYmVmb3JlIHRoZSBuZXcgc3RhY2tpbmcgY29udGFpbmVyCisg
ICAgLy8gKGIpIHBhcnQgb2YgdGhlIG5ldyBzdGFja2luZyBjb250YWluZXIKKyAgICAvLyAoYykg
YWZ0ZXIgdGhlIG5ldyBzdGFja2luZyBjb250YWluZXIKKyAgICAvLworICAgIC8vIFdlIGFjdHVh
bGx5IG9ubHkgbmVlZCB0byBjaGVjayAoYSkgYW5kIChjKSwgYmVjYXVzZSB0aGUgb3JkZXIgb2Yg
dGhlCisgICAgLy8gY2hpbGRyZW4gd2lsbCBub3QgY2hhbmdlIHdpdGggcmVzcGVjdCB0byBlYWNo
IG90aGVyLiBUaGlzIGlzIGJlY2F1c2UKKyAgICAvLyB0aGF0IG9yZGVyIGlzIGRldGVybWluZWQg
YnkgdGhlIHRyZWUgb3JkZXIgYW5kIHotb3JkZXIsIHdoaWNoIHNob3VsZAorICAgIC8vIGJlIGNv
bXBsZXRlbHkgdW5hZmZlY3RlZCBieSBwcm9tb3Rpb24uIFRvIGRvIHRoaXMsIHdlIHRha2UgdHdv
IHBhc3NlcworICAgIC8vIG92ZXIgdGhlIGxpc3RzLCBvbmUgZnJvbSB0aGUgYmVnaW5uaW5nLCB0
aGUgb3RoZXIgZnJvbSB0aGUgZW5kLCBjaGVja2luZworICAgIC8vIGZvciBhbnkgaW5jb25zaXN0
ZW5jaWVzIGJldHdlZW4gdGhlIHR3byBsaXN0cyB0aGF0IGNvdWxkIGNhdXNlIGEgY2hhbmdlCisg
ICAgLy8gaW4gcGFpbnQgb3JkZXIgZHVlIHRvIHByb21vdGlvbi4KKyAgICBmb3IgKGludCBwYXNz
ID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgeworICAgICAgICBTdGFja2luZ09yZGVyRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IHBhc3MgPyBGcm9tTGVmdCA6IEZyb21SaWdodDsKKworICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZUJlZm9yZVByb21vdGUgJiYgaW5kZXggPCBz
aXplQWZ0ZXJQcm9tb3RlOyBpbmRleCsrKSB7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJMYXll
ciogbGF5ZXJCZWZvcmVQcm9tb3RlID0gZ2V0U3RhY2tpbmdPcmRlckVsZW1lbnRBdChwb3NaT3Jk
ZXJMaXN0QmVmb3JlUHJvbW90ZS5nZXQoKSwgbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGUuZ2V0
KCksIGRpcmVjdGlvbiwgaW5kZXgpOworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxh
eWVyQWZ0ZXJQcm9tb3RlID0gZ2V0U3RhY2tpbmdPcmRlckVsZW1lbnRBdChwb3NaT3JkZXJMaXN0
QWZ0ZXJQcm9tb3RlLmdldCgpLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLmdldCgpLCBkaXJl
Y3Rpb24sIGluZGV4KTsKKworICAgICAgICAgICAgaWYgKGxheWVyQmVmb3JlUHJvbW90ZSAhPSBs
YXllckFmdGVyUHJvbW90ZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIGZpbmQgYSBtaXNt
YXRjaCwgdGhlIG9ubHkgc2l0dWF0aW9uIHdoZXJlIHdlIGhhdmVuJ3QKKyAgICAgICAgICAgICAg
ICAvLyBuZWNlc3NhcmlseSBjaGFuZ2VkIHBhaW50IG9yZGVyIHlldCBpcyBpZiBsYXllckFmdGVy
UHJvbW90ZQorICAgICAgICAgICAgICAgIC8vIGlzIHRoaXMuCisgICAgICAgICAgICAgICAgaWYg
KGxheWVyQWZ0ZXJQcm9tb3RlICE9IHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FuUHJv
bW90ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0lu
U3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShjb25zdCBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwg
aW50PiYgbG9va3VwLCBpbnQmIG1pbkluZGV4LCBpbnQmIG1heEluZGV4LCBpbnQmIGNvdW50LCBi
b29sIGZpcnN0SXRlcmF0aW9uKQotewotICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCgpICYmICFm
aXJzdEl0ZXJhdGlvbikgewotICAgICAgICBpZiAobG9va3VwLmNvbnRhaW5zKHRoaXMpKSB7Ci0g
ICAgICAgICAgICBtaW5JbmRleCA9IHN0ZDo6bWluKG1pbkluZGV4LCBsb29rdXAuZ2V0KHRoaXMp
KTsKLSAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIGxvb2t1cC5nZXQo
dGhpcykpOwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgICAgICAgICAgICAgIC8vIEFsc28sIGlmIHRoZSBjdXJyZW50IGxheWVyIGhh
cyBhIGJhY2tncm91bmQsIHRoZW4gYW55CisgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgei1v
cmRlciBjaGlsZHJlbiB3aWxsIGdldCBiZXR3ZWVuIHRoZSBiYWNrZ3JvdW5kCisgICAgICAgICAg
ICAgICAgLy8gYW5kIHRoZSByZXN0IG9mIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICBpZiAo
cGFzcyAmJiBoYXNCYWNrZ3JvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGNhblByb21vdGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQogCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGludCBj
aGlsZE1pbkluZGV4ID0gMDsKLSAgICAgICAgaW50IGNoaWxkTWF4SW5kZXggPSAwOwotICAgICAg
ICBpbnQgY2hpbGRDb3VudCA9IDA7Ci0gICAgICAgIGNoaWxkLT51cGRhdGVEZXNjZW5kYW50c0Fy
ZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUobG9va3VwLCBjaGlsZE1pbkluZGV4
LCBjaGlsZE1heEluZGV4LCBjaGlsZENvdW50LCBmYWxzZSk7Ci0gICAgICAgIGlmIChjaGlsZENv
dW50KSB7Ci0gICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwotICAgICAgICAgICAgbWlu
SW5kZXggPSBzdGQ6Om1pbihtaW5JbmRleCwgY2hpbGRNaW5JbmRleCk7Ci0gICAgICAgICAgICBt
YXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBjaGlsZE1heEluZGV4KTsKKyAgICAgICAgICAg
IGlmIChsYXllckFmdGVyUHJvbW90ZSA9PSB0aGlzKQorICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjYW5Qcm9tb3RlKQorICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgaWYgKCFpc1N0YWNraW5nQ29udGV4dCgpKSB7Ci0gICAgICAgIGJvb2wg
bmV3VmFsdWUgPSBtYXhJbmRleCAtIG1pbkluZGV4ID09IGNvdW50OwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLSAgICAgICAgYm9vbCBkaWRVcGRhdGUgPSBuZXdWYWx1ZSAhPSBt
X2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcjsKKyAgICBib29sIGRpZFVw
ZGF0ZSA9IChjYW5Qcm9tb3RlICE9IG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWluZXIp
OwogI2VuZGlmCi0gICAgICAgIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09y
ZGVyID0gbmV3VmFsdWU7CisKKyAgICBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVy
ID0gY2FuUHJvbW90ZTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAg
ICAgaWYgKGRpZFVwZGF0ZSkKLSAgICAgICAgICAgIHVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9s
bGluZygpOworICAgIGlmIChkaWRVcGRhdGUpCisgICAgICAgIHVwZGF0ZU5lZWRzQ29tcG9zaXRl
ZFNjcm9sbGluZygpOwogI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJl
U3RhY2tpbmdDb250YWluZXJSZWN1cnNpdmVseShSZW5kZXJMYXllciogYW5jZXN0b3JTdGFja2lu
Z0NvbnRleHQpCit7CisgICAgaWYgKHRoaXMgIT0gYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpIHsK
KyAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcihhbmNlc3RvclN0YWNraW5nQ29u
dGV4dCk7CiAgICAgfQorCisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjaGlsZC0+
dXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KGFuY2VzdG9yU3RhY2tpbmdD
b250ZXh0KTsKIH0KIAorCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3RzKGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRl
ckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkKIHsKICAgICBBU1NFUlQoIW1fdmlzaWJsZUNvbnRl
bnRTdGF0dXNEaXJ0eSk7CkBAIC05ODAsNyArMTA0Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmNh
bkJlU3RhY2tpbmdDb250YWluZXIoKSBjb25zdAogICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCgp
IHx8ICFzdGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJl
dHVybiBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcjsKKyAgICByZXR1
cm4gbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ0NvbnRhaW5lcjsKIH0KIAogdm9pZCBSZW5kZXJM
YXllcjo6c2V0SGFzVmlzaWJsZUNvbnRlbnQoKQpAQCAtMTI5NywxMiArMTM1OSw2IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6c3RhY2tpbmdDb250YWluZXIoKSBjb25zdAogICAgIHJldHVy
biBsYXllcjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzUG9zaXRpb25lZENvbnRhaW5lcihS
ZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5ZXJS
ZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwotICAgIHJldHVybiBsYXllci0+aXNSb290TGF5
ZXIoKSB8fCBsYXllclJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+aGFzVHJhbnNm
b3JtKCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZpeGVkUG9zaXRpb25lZENvbnRhaW5l
cihSZW5kZXJMYXllciogbGF5ZXIpCiB7CiAgICAgcmV0dXJuIGxheWVyLT5pc1Jvb3RMYXllcigp
IHx8IGxheWVyLT5oYXNUcmFuc2Zvcm0oKTsKQEAgLTE5MzgsNiArMTk5NCwxOSBAQCBib29sIFJl
bmRlckxheWVyOjpuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAogICAgIHJldHVybiBt
X25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZzsKIH0KIAordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
SXNOb3JtYWxGbG93T25seSgpCit7CisgICAgYm9vbCBpc05vcm1hbEZsb3dPbmx5ID0gc2hvdWxk
QmVOb3JtYWxGbG93T25seSgpOworICAgIGlmIChpc05vcm1hbEZsb3dPbmx5ICE9IG1faXNOb3Jt
YWxGbG93T25seSkgeworICAgICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBpc05vcm1hbEZsb3dP
bmx5OworICAgICAgICBSZW5kZXJMYXllciogcCA9IHBhcmVudCgpOworICAgICAgICBpZiAocCkK
KyAgICAgICAgICAgIHAtPmRpcnR5Tm9ybWFsRmxvd0xpc3QoKTsKKyAgICAgICAgZGlydHlTdGFj
a2luZ0NvbnRhaW5lclpPcmRlckxpc3RzKCk7CisgICAgfQorfQorCisKIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpCiB7CiAgICAgYm9vbCBvbGROZWVk
c0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZzsKQEAgLTE5
NTgsNiArMjAyNyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNj
cm9sbGluZygpCiAgICAgfQogCiAgICAgaWYgKG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyAh
PSBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZykgeworICAgICAgICB1cGRhdGVJc05vcm1hbEZs
b3dPbmx5KCk7CiAgICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CiAgICAgICAgIGlm
IChpc1N0YWNraW5nQ29udGFpbmVyKCkpCiAgICAgICAgICAgICBkaXJ0eVpPcmRlckxpc3RzKCk7
CkBAIC01MzYxLDcgKzU0MzEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJv
b2wgaW5jbHVkZUhpZGRlbkxheWVycywgQ29sbGVjdExheWVyc0JlaGF2aW9yCiAKIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpCiB7Ci0gICAgYm9vbCBzaG91bGRV
cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIgPSBpc1N0YWNraW5n
Q29udGV4dCgpICYmIChtX3pPcmRlckxpc3RzRGlydHkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5
KTsKKyAgICBib29sIHNob3VsZFVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIgPSBhY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkgJiYgaXNTdGFja2luZ0Nv
bnRleHQoKSAmJiAobV96T3JkZXJMaXN0c0RpcnR5IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7
CiAgICAgdXBkYXRlWk9yZGVyTGlzdHMoKTsKICAgICB1cGRhdGVOb3JtYWxGbG93TGlzdCgpOwog
CkBAIC01MzcwLDggKzU0NDAsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJMaXN0
c0lmTmVlZGVkKCkKICAgICAgICAgcmVmbGVjdGlvbkxheWVyLT51cGRhdGVOb3JtYWxGbG93TGlz
dCgpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRVcGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3Vv
dXNJblN0YWNraW5nT3JkZXIpIHsKLSAgICAgICAgdXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1
b3VzSW5TdGFja2luZ09yZGVyKCk7CisgICAgaWYgKHNob3VsZFVwZGF0ZUNhbkJlU3RhY2tpbmdD
b250YWluZXIpIHsKKyAgICAgICAgLy8gY2FsbCBVcGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVy
IGZvciBhbGwgZGVzY2VuZGFudHMsCisgICAgICAgIC8vIHBhc3Npbmcgc2VsZiBpbiBhcyBhbmNl
c3RvciBzdGFja2luZyBjb250ZXh0LgorICAgICAgICB1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFp
bmVyUmVjdXJzaXZlbHkodGhpcyk7CisKICAgICAgICAgLy8gVGhlIGFib3ZlIGZ1bmN0aW9uIGNh
biBjYXVzZSB1cyB0byB1cGRhdGUgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcKICAgICAgICAg
Ly8gYW5kIGRpcnR5IG91ciBsYXllciBsaXN0cy4gUmVmcmVzaCB0aGVtIGlmIG5lY2Vzc2FyeS4K
ICAgICAgICAgdXBkYXRlWk9yZGVyTGlzdHMoKTsKQEAgLTU1NTgsNyArNTYzMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVN0YWNraW5nQ29udGV4dHNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTCiAgICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dCA9IHRoaXMtPmlz
U3RhY2tpbmdDb250ZXh0KCk7CiAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0ICE9IHdhc1N0YWNr
aW5nQ29udGV4dCkgewogICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMo
KTsKLSAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KQorICAgICAgICBpZiAoaXNTdGFja2lu
Z0NvbnRleHQgfHwgaXNTdGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICAgICAgZGlydHlaT3Jk
ZXJMaXN0cygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjbGVhclpPcmRlckxpc3RzKCk7
CkBAIC01NTY5LDcgKzU2NDIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0Nv
bnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkUwogICAgIC8vIGxp
a2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4KICAgICBpZiAob2xkU3R5bGUtPnpJ
bmRleCgpICE9IHJlbmRlcmVyKCktPnN0eWxlKCktPnpJbmRleCgpIHx8IG9sZFN0eWxlLT52aXNp
YmlsaXR5KCkgIT0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpKSB7CiAgICAgICAg
IGRpcnR5U3RhY2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygpOwotICAgICAgICBpZiAoaXNTdGFj
a2luZ0NvbnRleHQpCisgICAgICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCB8fCBpc1N0YWNraW5n
Q29udGFpbmVyKCkpCiAgICAgICAgICAgICBkaXJ0eVpPcmRlckxpc3RzKCk7CiAgICAgfQogfQpA
QCAtNTY1OCwxNCArNTczMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU91dE9mRmxvd1Bv
c2l0aW9uZWQoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogCiB2b2lkIFJlbmRlckxheWVy
OjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpCiB7Ci0gICAgYm9vbCBpc05vcm1hbEZsb3dPbmx5ID0gc2hvdWxkQmVOb3JtYWxGbG93T25s
eSgpOwotICAgIGlmIChpc05vcm1hbEZsb3dPbmx5ICE9IG1faXNOb3JtYWxGbG93T25seSkgewot
ICAgICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBpc05vcm1hbEZsb3dPbmx5OwotICAgICAgICBS
ZW5kZXJMYXllciogcCA9IHBhcmVudCgpOwotICAgICAgICBpZiAocCkKLSAgICAgICAgICAgIHAt
PmRpcnR5Tm9ybWFsRmxvd0xpc3QoKTsKLSAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5lclpP
cmRlckxpc3RzKCk7Ci0gICAgfQorICAgIHVwZGF0ZUlzTm9ybWFsRmxvd09ubHkoKTsKIAogICAg
IGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPTUFSUVVFRSAmJiByZW5k
ZXJlcigpLT5zdHlsZSgpLT5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNTk9ORSAmJiByZW5kZXJlcigp
LT5pc0JveCgpKSB7CiAgICAgICAgIGlmICghbV9tYXJxdWVlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAppbmRleCAyMGIwMWNhNTdhY2E3NzNiN2E4ODYyY2RiNDM4MzJhY2Qw
ODkwYmVlLi5kZTk5OTY0YmEzYzM0Mjk2ZGZlZTFhYTg2MjU3YmEzYTU2NDkyNWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtODAwLDggKzgwMCwxMCBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluSGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNj
ZW5kYW50U3RhdHVzKCk7CiAKICAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVy
Zmxvd1Njcm9sbEVuYWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZURlc2NlbmRhbnRzQXJl
Q29udGlndW91c0luU3RhY2tpbmdPcmRlcigpOwotICAgIHZvaWQgdXBkYXRlRGVzY2VuZGFudHNB
cmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyUmVjdXJzaXZlKGNvbnN0IEhhc2hNYXA8Y29uc3Qg
UmVuZGVyTGF5ZXIqLCBpbnQ+JiwgaW50JiBtaW5JbmRleCwgaW50JiBtYXhJbmRleCwgaW50JiBj
b3VudCwgYm9vbCBmaXJzdEl0ZXJhdGlvbik7CisKKyAgICBib29sIGlzUHJvbW90ZWRMYXllckxp
c3RJbkNvcnJlY3RTdGFja2luZ09yZGVyKGNvbnN0IFZlY3Rvcjxjb25zdCBSZW5kZXJMYXllcio+
JiwgY29uc3QgVmVjdG9yPGNvbnN0IFJlbmRlckxheWVyKj4mKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIoUmVuZGVyTGF5ZXIqKTsKKyAgICB2b2lkIHVwZGF0
ZUNhbkJlU3RhY2tpbmdDb250YWluZXJSZWN1cnNpdmVseShSZW5kZXJMYXllciopOwogCiAgICAg
dm9pZCBjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiA9IDApOwogICAgIHZvaWQg
Y29tcHV0ZVJlcGFpbnRSZWN0c0luY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CkBAIC04MjMsNiArODI1
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhhc091dE9mRmxvd1Bv
c2l0aW9uZWREZXNjZW5kYW50U3RhdHVzKCk7CiAgICAgdm9pZCB1cGRhdGVPdXRPZkZsb3dQb3Np
dGlvbmVkKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKKyAgICB2b2lkIHVwZGF0ZUlz
Tm9ybWFsRmxvd09ubHkoKTsKICAgICB2b2lkIHVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjaGFuZ2VkLgpAQCAt
MTA3OCw3ICsxMDgxLDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIElmIHRoaXMgaXMgdHJ1ZSwgdGhl
biBubyBub24tZGVzY2VuZGFudCBhcHBlYXJzIGJldHdlZW4gYW55IG9mIG91cgogICAgIC8vIGRl
c2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIGlzIG9uZSBvZiB0aGUgcmVxdWlyZW1l
bnRzIG9mIGJlaW5nCiAgICAgLy8gYWJsZSB0byBzYWZlbHkgYmVjb21lIGEgc3RhY2tpbmcgY29u
dGV4dC4KLSAgICBib29sIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVy
IDogMTsKKyAgICBib29sIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWluZXIgOiAxOwog
CiAgICAgY29uc3QgYm9vbCBtX2lzUm9vdExheWVyIDogMTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY0ODY3NGEwYTRh
YTFkMGE1NzJlNjZjNDVlNGE0ZTBmOTlhNDNkYTAuLjRlMzJmZTVlYmQwNTU2ODY5N2ZiZWU3YWZj
ZWMzMGI5N2EyMTI3MGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMy0wMi0yNyAgR2xlbm4g
SGFydG1hbm4gIDxoYXJ0bWFubmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IGxv
Z2ljIGZvciBhdXRvbWF0aWNhbGx5IG9wdGluZyBpbnRvIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzMDIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBzaW1wbGlm
eSB0aGUgbG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZAorICAg
ICAgICBzY3JvbGxpbmcgYnkgZ2VuZXJhdGluZyB0d28gc2V0cyBvZiB6LW9yZGVyIGxpc3RzLCBm
aXJzdCBmb3JjaW5nIGEKKyAgICAgICAgbGF5ZXIgdG8gbm90IHByb21vdGUsIHRoZW4gZm9yY2lu
ZyBpdCB0byBwcm9tb3RlIHRoZSBzZWNvbmQgdGltZS4gVGhlCisgICAgICAgIHR3byBzZXRzIG9m
IGxpc3RzIGNhbiBiZSByZWxhdGl2ZWx5IGVhc2lseSBjb21wYXJlZCBmb3IgYW55IHBvc3NpYmxl
CisgICAgICAgIGNoYW5nZSBpbiBzdGFja2luZyBvcmRlci4gSWYgdGhlIHR3byBsaXN0cyBhcmUg
aW4gZmFjdCB0aGUgc2FtZSwgdGhlbgorICAgICAgICB3ZSBrbm93IGl0IGlzIHNhZmUgdG8gcHJv
bW90ZSB0aGUgbGF5ZXIgdG8gYmUgYSBzdGFja2luZyBjb250YWluZXIuIFRoaXMKKyAgICAgICAg
c2hvdWxkIGJlIG1vcmUgaW50dWl0aXZlIGFuZCBtb3JlIHJvYnVzdCB0aGFuIHRoZSBjdXJyZW50
IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21h
dGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3Np
dGVkLXNjcm9sbGluZy5odG1sOgorICAgICAgICAqIGNvbXBvc2l0aW5nL292ZXJmbG93L29wdC1p
bnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3Np
dGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDItMjUgIEFsZXhp
cyBNZW5hcmQgIDxhbGV4aXNAd2Via2l0Lm9yZz4KIAogICAgICAgICB0cmFuc2l0aW9uLXByb3Bl
cnR5IHByb3BlcnR5IGRvZXNuJ3QgYWNjZXB0ICJhbGwsIDxJREVOVD4iLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1j
b21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGlu
Zy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4
cGVjdGVkLnR4dAppbmRleCBkZWVmNTE1MDJiNzlkZDA0ZGE0NzhkNTFlZjAyNDk3MThhNjQ5Mjc4
Li44YjEzNzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNv
bXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3Np
dGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5n
LWV4cGVjdGVkLnR4dApAQCAtMSwxMjcgKzEgQEAKLUl0ZXJhdGlvbiAwOiBQYXNzZWQKLUl0ZXJh
dGlvbiAwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTogUGFzc2VkCi1JdGVyYXRpb24gMSwgbGF5
ZXIgdHJlZQotSXRlcmF0aW9uIDI6IFBhc3NlZAotSXRlcmF0aW9uIDIsIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiAzOiBQYXNzZWQKLUl0ZXJhdGlvbiAzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDog
UGFzc2VkCi1JdGVyYXRpb24gNCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU6IFBhc3NlZAotSXRl
cmF0aW9uIDUsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA2OiBQYXNzZWQKLUl0ZXJhdGlvbiA2LCBs
YXllciB0cmVlCi1JdGVyYXRpb24gNzogUGFzc2VkCi1JdGVyYXRpb24gNywgbGF5ZXIgdHJlZQot
SXRlcmF0aW9uIDg6IFBhc3NlZAotSXRlcmF0aW9uIDgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biA5OiBQYXNzZWQKLUl0ZXJhdGlvbiA5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTA6IFBh
c3NlZAotSXRlcmF0aW9uIDEwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTE6IFBhc3NlZAotSXRl
cmF0aW9uIDExLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMTI6IFBhc3NlZAotSXRlcmF0aW9uIDEy
LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTM6IFBhc3NlZAotSXRlcmF0aW9uIDEzLCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gMTQ6IFBhc3NlZAotSXRlcmF0aW9uIDE0LCBubyBsYXllciB0
cmVlCi1JdGVyYXRpb24gMTU6IFBhc3NlZAotSXRlcmF0aW9uIDE1LCBubyBsYXllciB0cmVlCi1J
dGVyYXRpb24gMTY6IFBhc3NlZAotSXRlcmF0aW9uIDE2LCBubyBsYXllciB0cmVlCi1JdGVyYXRp
b24gMTc6IFBhc3NlZAotSXRlcmF0aW9uIDE3LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTg6
IFBhc3NlZAotSXRlcmF0aW9uIDE4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMTk6IFBhc3Nl
ZAotSXRlcmF0aW9uIDE5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMjA6IFBhc3NlZAotSXRl
cmF0aW9uIDIwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjE6IFBhc3NlZAotSXRlcmF0aW9uIDIx
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjI6IFBhc3NlZAotSXRlcmF0aW9uIDIyLCBsYXllciB0
cmVlCi1JdGVyYXRpb24gMjM6IFBhc3NlZAotSXRlcmF0aW9uIDIzLCBsYXllciB0cmVlCi1JdGVy
YXRpb24gMjQ6IFBhc3NlZAotSXRlcmF0aW9uIDI0LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjU6
IFBhc3NlZAotSXRlcmF0aW9uIDI1LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjY6IFBhc3NlZAot
SXRlcmF0aW9uIDI2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjc6IFBhc3NlZAotSXRlcmF0aW9u
IDI3LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjg6IFBhc3NlZAotSXRlcmF0aW9uIDI4LCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMjk6IFBhc3NlZAotSXRlcmF0aW9uIDI5LCBsYXllciB0cmVlCi1J
dGVyYXRpb24gMzA6IFBhc3NlZAotSXRlcmF0aW9uIDMwLCBsYXllciB0cmVlCi1JdGVyYXRpb24g
MzE6IFBhc3NlZAotSXRlcmF0aW9uIDMxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzI6IFBhc3Nl
ZAotSXRlcmF0aW9uIDMyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzM6IFBhc3NlZAotSXRlcmF0
aW9uIDMzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzQ6IFBhc3NlZAotSXRlcmF0aW9uIDM0LCBu
byBsYXllciB0cmVlCi1JdGVyYXRpb24gMzU6IFBhc3NlZAotSXRlcmF0aW9uIDM1LCBubyBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMzY6IFBhc3NlZAotSXRlcmF0aW9uIDM2LCBsYXllciB0cmVlCi1J
dGVyYXRpb24gMzc6IFBhc3NlZAotSXRlcmF0aW9uIDM3LCBsYXllciB0cmVlCi1JdGVyYXRpb24g
Mzg6IFBhc3NlZAotSXRlcmF0aW9uIDM4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gMzk6IFBh
c3NlZAotSXRlcmF0aW9uIDM5LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNDA6IFBhc3NlZAot
SXRlcmF0aW9uIDQwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDE6IFBhc3NlZAotSXRlcmF0aW9u
IDQxLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDI6IFBhc3NlZAotSXRlcmF0aW9uIDQyLCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gNDM6IFBhc3NlZAotSXRlcmF0aW9uIDQzLCBsYXllciB0cmVlCi1J
dGVyYXRpb24gNDQ6IFBhc3NlZAotSXRlcmF0aW9uIDQ0LCBsYXllciB0cmVlCi1JdGVyYXRpb24g
NDU6IFBhc3NlZAotSXRlcmF0aW9uIDQ1LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDY6IFBhc3Nl
ZAotSXRlcmF0aW9uIDQ2LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDc6IFBhc3NlZAotSXRlcmF0
aW9uIDQ3LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNDg6IFBhc3NlZAotSXRlcmF0aW9uIDQ4LCBu
byBsYXllciB0cmVlCi1JdGVyYXRpb24gNDk6IFBhc3NlZAotSXRlcmF0aW9uIDQ5LCBubyBsYXll
ciB0cmVlCi1JdGVyYXRpb24gNTA6IFBhc3NlZAotSXRlcmF0aW9uIDUwLCBsYXllciB0cmVlCi1J
dGVyYXRpb24gNTE6IFBhc3NlZAotSXRlcmF0aW9uIDUxLCBsYXllciB0cmVlCi1JdGVyYXRpb24g
NTI6IFBhc3NlZAotSXRlcmF0aW9uIDUyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTM6IFBhc3Nl
ZAotSXRlcmF0aW9uIDUzLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTQ6IFBhc3NlZAotSXRlcmF0
aW9uIDU0LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTU6IFBhc3NlZAotSXRlcmF0aW9uIDU1
LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNTY6IFBhc3NlZAotSXRlcmF0aW9uIDU2LCBubyBs
YXllciB0cmVlCi1JdGVyYXRpb24gNTc6IFBhc3NlZAotSXRlcmF0aW9uIDU3LCBubyBsYXllciB0
cmVlCi1JdGVyYXRpb24gNTg6IFBhc3NlZAotSXRlcmF0aW9uIDU4LCBubyBsYXllciB0cmVlCi1J
dGVyYXRpb24gNTk6IFBhc3NlZAotSXRlcmF0aW9uIDU5LCBubyBsYXllciB0cmVlCi1JdGVyYXRp
b24gNjA6IFBhc3NlZAotSXRlcmF0aW9uIDYwLCBsYXllciB0cmVlCi1JdGVyYXRpb24gNjE6IFBh
c3NlZAotSXRlcmF0aW9uIDYxLCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gNjI6IFBhc3NlZAot
SXRlcmF0aW9uIDYyLCBsYXllciB0cmVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBv
c2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxp
bmcuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHkt
b3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAppbmRleCAxZTY3YjVkZDc4ZmI3MTFi
YmUxNGMxNjYxODgzMmU2MTFkYWZhZjQwLi5jMDIyNmI4MDg3ZGI3OWJmZTE1MjQ3MTQ4OGUwOWRm
NDdlOTE1YWY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9h
dXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21w
b3NpdGVkLXNjcm9sbGluZy5odG1sCkBAIC0xMiwxMiArMTIsMTQgQEAKICAgICAgIG92ZXJmbG93
OiBzY3JvbGw7CiAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICBib3JkZXI6IDFweCBzb2xpZCBi
bGFjazsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMEZGRkY7CiAgICAgfQogCiAgICAgLnNj
cm9sbGVkIHsKICAgICAgIHdpZHRoOiAxODBweDsKLSAgICAgIGhlaWdodDogOTBweDsKKyAgICAg
IGhlaWdodDogMzBweDsKICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgIHRvcDogNzBweDsKICAg
ICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CiAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAg
ICAgfQpAQCAtMjUsMjUgKzI3LDMyIEBACiAgICAgLnBvc2l0aW9uZWQgewogICAgICAgd2lkdGg6
IDEyMHB4OwogICAgICAgaGVpZ2h0OiAyNDBweDsKLSAgICAgIGJhY2tncm91bmQtY29sb3I6IGdy
ZWVuOwogICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgIH0KIAorICAgICNzZWNvbmRDaGls
ZCB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0M5OTk5OworICAgICAgdG9wOiA1MHB4Owor
ICAgIH0KKwogICAgICNwcmVkZWNlc3NvciB7CiAgICAgICBsZWZ0OiAyMHB4OwogICAgICAgdG9w
OiAyMHB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5MDA2NjsKICAgICB9CiAKICAgICAj
c3VjY2Vzc29yIHsKLSAgICAgIGxlZnQ6IDE2MHB4OworICAgICAgbGVmdDogMjBweDsKICAgICAg
IHRvcDogMjBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwNjY7CiAgICAgfQogCi0g
ICAgI2Rlc2NlbmRhbnQgewotICAgICAgbGVmdDogOTBweDsKLSAgICAgIHRvcDogMjBweDsKLSAg
ICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7Ci0gICAgICB6LWluZGV4OiAtMjA7CisgICAgI25v
cm1hbEZsb3cgeworICAgICAgd2lkdGg6IDE4MHB4OworICAgICAgaGVpZ2h0OiAzMHB4OworICAg
ICAgbWFyZ2luOiAxMHB4OworICAgICAgdG9wOiAtMjBweDsKKyAgICAgIGJhY2tncm91bmQtY29s
b3I6IHllbGxvdzsKICAgICB9CiAgIDwvc3R5bGU+CiAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CkBAIC01Miw5ICs2MSw2IEBACiAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQogICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CiAKLSAgICBpZiAo
d2luZG93LmludGVybmFscykKLSAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCh0cnVlKTsKLQogICAg
IGZ1bmN0aW9uIHdyaXRlKHN0cikKICAgICB7CiAgICAgICB2YXIgcHJlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKQEAgLTYyLDE2OSArNjgsMTk1IEBACiAgICAgICBwcmUu
YXBwZW5kQ2hpbGQodGV4dCk7CiAgICAgfQogCi0gICAgdmFyIGl0ZXJhdGlvbiA9IDA7Ci0gICAg
ZnVuY3Rpb24gcHJpbnRSZXN1bHQoZXhwZWN0ZWRSZXN1bHQpCisgICAgZnVuY3Rpb24gZGlkT3B0
SW4oKQorICAgIHsKKyAgICAgIC8vIEZvcmNlIGEgc3R5bGUgcmVjYWxjLgorICAgICAgZG9jdW1l
bnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgd2lu
ZG93LmludGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOworICAgICAgdmFyIGxheWVyVHJl
ZSA9IHdpbmRvdy5pbnRlcm5hbHMubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50KTsKKworICAgICAg
aWYgKGRlYnVnTW9kZSkKKyAgICAgICAgICB3cml0ZShsYXllclRyZWUpOworCisgICAgICByZXR1
cm4gISFsYXllclRyZWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0U3RhY2tpbmdPcmRlcigp
CiAgICAgeworICAgICAgdmFyIGRpdkVsZW1lbnRzID0gW107CiAgICAgICAvLyBGb3JjZSBhIHN0
eWxlIHJlY2FsYy4KICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwogCi0gICAgICBpZiAo
d2luZG93LmludGVybmFscykgewotICAgICAgICAvLyBGb3JjZSBhIGxheW91dC4KLSAgICAgICAg
d2luZG93LmludGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOwotICAgICAgICB2YXIgbGF5
ZXJUcmVlID0gd2luZG93LmludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQpOwotCi0g
ICAgICAgIGlmICghbGF5ZXJUcmVlID09ICFleHBlY3RlZFJlc3VsdCkKLSAgICAgICAgICB3cml0
ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJpbmcoKSArICc6IFBhc3NlZCcpCi0gICAg
ICAgIGVsc2UKLSAgICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJp
bmcoKSArICc6IEZBSUxFRCcpCi0KLSAgICAgICAgaWYgKGxheWVyVHJlZSkgewotICAgICAgICAg
IHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmluZygpICsgJywgbGF5ZXIgdHJl
ZScpOwotICAgICAgICAgIGlmIChkZWJ1Z01vZGUpCi0gICAgICAgICAgICAgIHdyaXRlKGxheWVy
VHJlZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHdyaXRlKCdJdGVyYXRpb24gJyArIGl0
ZXJhdGlvbi50b1N0cmluZygpICsgJywgbm8gbGF5ZXIgdHJlZScpOworICAgICAgLy8gRm9yY2Ug
YSBsYXlvdXQuCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7
CisKKyAgICAgIHZhciBlcnJvckNvZGUgPSAwOworICAgICAgdmFyIHN0YWNraW5nT3JkZXIgPSB3
aW5kb3cuaW50ZXJuYWxzLm5vZGVzRnJvbVJlY3QoZG9jdW1lbnQsIDEwMCwgNzUsIDIwMCwgMjAw
LCAyMDAsIDIwMCwgZmFsc2UsIGZhbHNlLCBlcnJvckNvZGUpOworCisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0YWNraW5nT3JkZXIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0YWNr
aW5nT3JkZXJbaV0ubm9kZU5hbWUgPT09ICJESVYiKSB7CisgICAgICAgICAgZGl2RWxlbWVudHMu
cHVzaChzdGFja2luZ09yZGVyW2ldKTsKKyAgICAgICAgfQogICAgICAgfQotICAgICAgaXRlcmF0
aW9uKys7CisKKyAgICAgIHJldHVybiBkaXZFbGVtZW50czsKICAgICB9CiAKICAgICBmdW5jdGlv
biBkb1Rlc3QoKQogICAgIHsKKyAgICAgIHZhciBhbmNlc3RvciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdhbmNlc3RvcicpOwogICAgICAgdmFyIHByZWRlY2Vzc29yID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3ByZWRlY2Vzc29yJyk7CiAgICAgICB2YXIgc3VjY2Vzc29yID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3N1Y2Nlc3NvcicpOwogICAgICAgdmFyIGNvbnRhaW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKICAgICAgIHZhciBmaXJzdENoaWxk
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0Q2hpbGQnKTsKICAgICAgIHZhciBzZWNv
bmRDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWNvbmRDaGlsZCcpOwotICAgICAg
dmFyIGRlc2NlbmRhbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVzY2VuZGFudCcpOwog
ICAgICAgdmFyIGNvdW50ID0gMDsKIAotICAgICAgZGVzY2VuZGFudC5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOwotCi0gICAgICAvLyBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4KLSAgICAg
IGZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDU7ICsr
aikgewotICAgICAgICAgIGZvciAoayA9IDA7IGsgPCAyOyArK2spIHsKLSAgICAgICAgICAgIGZv
ciAobCA9IDA7IGwgPCAyOyArK2wpIHsKLSAgICAgICAgICAgICAgdmFyIG1pblpJbmRleCA9IDA7
Ci0gICAgICAgICAgICAgIHZhciBtYXhaSW5kZXggPSAwOwotICAgICAgICAgICAgICBpZiAoaSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RDaGlsZC5zdHlsZS56SW5kZXggPSAnMSc7Ci0g
ICAgICAgICAgICAgICAgc2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4ID0gJzMnOwotICAgICAgICAg
ICAgICAgIG1heFpJbmRleCA9IDM7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSAxKSB7
Ci0gICAgICAgICAgICAgICAgZmlyc3RDaGlsZC5zdHlsZS56SW5kZXggPSAnLTEnOwotICAgICAg
ICAgICAgICAgIHNlY29uZENoaWxkLnN0eWxlLnpJbmRleCA9ICctMyc7Ci0gICAgICAgICAgICAg
ICAgbWluWkluZGV4ID0gLTM7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgZmlyc3RDaGlsZC5zdHlsZS56SW5kZXggPSAnLTEnOwotICAgICAgICAgICAgICAgIHNlY29u
ZENoaWxkLnN0eWxlLnpJbmRleCA9ICczJzsKLSAgICAgICAgICAgICAgICBtaW5aSW5kZXggPSAt
MTsKLSAgICAgICAgICAgICAgICBtYXhaSW5kZXggPSAzOwotICAgICAgICAgICAgICB9CisgICAg
ICBmb3IgKHZhciBzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRlc0NvbnRhaW5lciA9IDA7IHNp
YmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVyIDw9IDE7ICsrc2libGluZ1Nob3Vs
ZEJlWmVyb0lmUHJlY2VkZXNDb250YWluZXIpIHsKKyAgICAgICAgZm9yICh2YXIgY29udGFpbmVy
SXNQb3NpdGlvbmVkID0gMDsgY29udGFpbmVySXNQb3NpdGlvbmVkIDw9IDE7ICsrY29udGFpbmVy
SXNQb3NpdGlvbmVkKSB7CisgICAgICAgICAgZm9yICh2YXIgc2libGluZ0lzU3VjY2Vzc29yID0g
MDsgc2libGluZ0lzU3VjY2Vzc29yIDw9IDE7ICsrc2libGluZ0lzU3VjY2Vzc29yKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBoYXNQb3NpdGlvbmVkQW5jZXN0b3IgPSAwOyBoYXNQb3NpdGlvbmVk
QW5jZXN0b3IgPD0gMTsgKytoYXNQb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAg
dmFyIGluZGljZXMgPSBbIDAsIDEsIDIsIDMgXTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgc2li
bGluZ0luZGV4ID0gMDsgc2libGluZ0luZGV4IDwgNDsgKytzaWJsaW5nSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgc2libGluZ0luZGljZXMgPSBpbmRpY2VzLnNsaWNlKDApOworICAgICAg
ICAgICAgICAgIHNpYmxpbmdJbmRpY2VzLnNwbGljZShzaWJsaW5nSW5kZXgsIDEpOworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGNvbnRhaW5lclN1YmluZGV4ID0gMDsgY29udGFpbmVyU3ViaW5k
ZXggPCAzOyArK2NvbnRhaW5lclN1YmluZGV4KSB7CisgICAgICAgICAgICAgICAgICB2YXIgY29u
dGFpbmVySW5kaWNlcyA9IHNpYmxpbmdJbmRpY2VzLnNsaWNlKDApOworICAgICAgICAgICAgICAg
ICAgdmFyIGNvbnRhaW5lckluZGV4ID0gY29udGFpbmVySW5kaWNlc1tjb250YWluZXJTdWJpbmRl
eF07CisgICAgICAgICAgICAgICAgICBjb250YWluZXJJbmRpY2VzLnNwbGljZShjb250YWluZXJT
dWJpbmRleCwgMSk7CisgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RDaGlsZEluZGV4ID0gY29u
dGFpbmVySW5kaWNlc1swXTsKKyAgICAgICAgICAgICAgICAgIHZhciBzZWNvbmRDaGlsZEluZGV4
ID0gY29udGFpbmVySW5kaWNlc1sxXTsKIAotICAgICAgICAgICAgICB2YXIgc2libGluZyA9IHBy
ZWRlY2Vzc29yOwotICAgICAgICAgICAgICB2YXIgdG9IaWRlID0gc3VjY2Vzc29yOwotICAgICAg
ICAgICAgICBpZiAoayA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgc2libGluZyA9IHN1Y2Nlc3Nv
cjsKLSAgICAgICAgICAgICAgICB0b0hpZGUgPSBwcmVkZWNlc3NvcjsKLSAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgdmFyIHNpYmxpbmdQcmVjZWRlc0NvbnRhaW5lciA9IHNpYmxp
bmdJbmRleCA9PSBjb250YWluZXJJbmRleCAtIDE7CisgICAgICAgICAgICAgICAgICBpZiAoZmly
c3RDaGlsZEluZGV4ID4gc2Vjb25kQ2hpbGRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJJc1Bvc2l0aW9uZWQgPT0g
MSAmJiBoYXNQb3NpdGlvbmVkQW5jZXN0b3IgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVj
ZWRlc0NvbnRhaW5lciA9PSAxICYmICFzaWJsaW5nUHJlY2VkZXNDb250YWluZXIpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICB2YXIgb3JkZXJpbmcg
PSBbIG51bGwsIG51bGwsIG51bGwsIG51bGwgXTsKKyAgICAgICAgICAgICAgICAgIG9yZGVyaW5n
W3NpYmxpbmdJbmRleF0gPSBzaWJsaW5nSXNTdWNjZXNzb3IgPT0gMSA/IHN1Y2Nlc3NvciA6IHBy
ZWRlY2Vzc29yOworICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbY29udGFpbmVySW5kZXhdID0g
aGFzUG9zaXRpb25lZEFuY2VzdG9yID09IDEgPyBhbmNlc3RvciA6IGNvbnRhaW5lcjsKKyAgICAg
ICAgICAgICAgICAgIG9yZGVyaW5nW2ZpcnN0Q2hpbGRJbmRleF0gPSBmaXJzdENoaWxkOworICAg
ICAgICAgICAgICAgICAgb3JkZXJpbmdbc2Vjb25kQ2hpbGRJbmRleF0gPSBzZWNvbmRDaGlsZDsK
KworICAgICAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAg
ICAgICAgICAgIHZhciB0b0hpZGUgPSBzdWNjZXNzb3I7CisgICAgICAgICAgICAgICAgICBpZiAo
c2libGluZ0lzU3VjY2Vzc29yID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgc2libGluZyA9
IHN1Y2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAgICAgdG9IaWRlID0gcHJlZGVjZXNzb3I7Cisg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIHRvSGlkZS5zdHlsZS5kaXNw
bGF5ID0gJ25vbmUnOworICAgICAgICAgICAgICAgICAgc2libGluZy5zdHlsZS5kaXNwbGF5ID0g
Jyc7CisKKyAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbmVkID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICAgIGlmIChjb250YWluZXJJc1Bvc2l0aW9uZWQgPT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICAg
ICAgICAgICAgICBwb3NpdGlvbmVkID0gY29udGFpbmVyOworICAgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICcnOwog
Ci0gICAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIHRoZSBzYW1lIGlmIHRoZSB0
aGUgZWxlbWVudCB0byBoaWRlIGlzCi0gICAgICAgICAgICAgIC8vIGRpc3BsYXk6aGlkZGVuIG9y
IGRpc3BsYXk6bm9uZS4KLSAgICAgICAgICAgICAgaWYgKGwgPT0gMCkKLSAgICAgICAgICAgICAg
ICB0b0hpZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHRvSGlkZS5zdHlsZS5kaXNwbGF5ID0gJ2hpZGRlbic7Ci0KLSAgICAgICAg
ICAgICAgc2libGluZy5zdHlsZS5kaXNwbGF5ID0gJyc7Ci0KLSAgICAgICAgICAgICAgaWYgKGog
PT0gMCkKLSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IChtYXhaSW5kZXgg
KyAxKS50b1N0cmluZygpOwotICAgICAgICAgICAgICBlbHNlIGlmIChqID09IDEpCi0gICAgICAg
ICAgICAgICAgc2libGluZy5zdHlsZS56SW5kZXggPSAobWluWkluZGV4IC0gMSkudG9TdHJpbmco
KTsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoaiA9PSAyKQotICAgICAgICAgICAgICAgIHNpYmxp
bmcuc3R5bGUuekluZGV4ID0gbWF4WkluZGV4LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVs
c2UgaWYgKGogPT0gMykKLSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IG1p
blpJbmRleC50b1N0cmluZygpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c2libGluZy5zdHlsZS56SW5kZXggPSAoKG1pblpJbmRleCArIG1heFpJbmRleCkgLyAyKS50b1N0
cmluZygpOwotCi0gICAgICAgICAgICAgIHZhciBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgIGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA+IG1heFpJbmRleCB8fAotICAgICAg
ICAgICAgICAgICAgc2libGluZy5zdHlsZS56SW5kZXggPCBtaW5aSW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICAgIC8vIHNpYmxpbmcgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2Ygb3VyIGRlc2NlbmRh
bnRzLgotICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IHRydWU7Ci0gICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2libGluZy5zdHlsZS56SW5kZXggPCBtYXhaSW5kZXggJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA+IG1pblpJbmRleCkgewot
ICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBpcyBiZXR3ZWVuIG91ciBkZXNjZW5kYW50cy4K
LSAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA9PSBtaW5aSW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICAgIGlmIChtaW5aSW5kZXggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgIC8v
IHNpYmxpbmcgbGllcyBiZXR3ZWVuIHVzIChub3JtYWwgZmxvdykgYW5kIG91ciBwb3MKLSAgICAg
ICAgICAgICAgICAgICAgICAvLyB6LW9yZGVyIGRlc2NlbmRhbnRzLCBzbyB3ZSBhcmUgbm90IGNv
bnRpZ3VvdXMuCi0gICAgICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJs
aW5nJ3MgekluZGV4IG1hdGNoZXMgdGhlIG1pbjsgd2UncmUgb25seSBvayBpZiBpdAotICAgICAg
ICAgICAgICAgICAgICAgIC8vIGFwcGVhcnMgZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgICAg
YXJlQ29udGlndW91cyA9IGsgPT0gMDsKKyAgICAgICAgICAgICAgICAgIGlmIChoYXNQb3NpdGlv
bmVkQW5jZXN0b3IgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS5w
b3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSBh
bmNlc3RvcjsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBh
bmNlc3Rvci5zdHlsZS5wb3NpdGlvbiA9ICcnOworCisgICAgICAgICAgICAgICAgICAvLyBBc3Np
Z24gei1pbmRpY2VzLgorICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25l
ZCA9PSAxIHx8IGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAg
ICBvcmRlcmluZ1tjb250YWluZXJJbmRleF0uc3R5bGUuekluZGV4ID0gJzAnOworICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5k
ZXggPSAnJzsKKyAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3Iuc3R5bGUuekluZGV4ID0gJyc7
CiAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2libGluZy5z
dHlsZS56SW5kZXggPT0gbWF4WkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAobWF4Wklu
ZGV4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcgbGllcyBiZXR3ZWVu
IHVzIChub3JtYWwgZmxvdykgYW5kIG5lZyB6LW9yZGVyCi0gICAgICAgICAgICAgICAgICAgICAg
Ly8gZGVzY2VuZGFudHMsIHNvIHdlIGFyZSBub3QgY29udGlndW91cy4KLSAgICAgICAgICAgICAg
ICAgICAgICBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1heFpJbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBp
cyBpbiB0aGUgcG9zIHotb3JkZXIgbGlzdCBhbmQgZG9lcyBub3QgYWZmZWN0Ci0gICAgICAgICAg
ICAgICAgICAgICAgLy8gdXMgc2luY2Ugd2UncmUgaW4gdGhlIG5vcm1hbCBmbG93IGxpc3QgYW5k
IG91cgotICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NhbmRhbnRzIGFyZSBpbiB0aGUgbmVn
IHotb3JkZXIgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8g
c2libGluZydzIHpJbmRleCBtYXRjaGVzIHRoZSBtYXg7IHdlJ3JlIG9ubHkgb2sgaWYgaXQKLSAg
ICAgICAgICAgICAgICAgICAgICAvLyBhcHBlYXJzIGFmdGVyLgotICAgICAgICAgICAgICAgICAg
ICAgIGFyZUNvbnRpZ3VvdXMgPSBrID09IDE7CisKKyAgICAgICAgICAgICAgICAgIHZhciBjdXJy
ZW50WkluZGV4ID0gc2libGluZ1ByZWNlZGVzQ29udGFpbmVyICYmIHNpYmxpbmdTaG91bGRCZVpl
cm9JZlByZWNlZGVzQ29udGFpbmVyID09IDEgPyAwIDogLTE7CisgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBjdXJyZW50SW5kZXggPSBjb250YWluZXJJbmRleCAtIDE7IGN1cnJlbnRJbmRleCA+
PSAwOyAtLWN1cnJlbnRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tjdXJy
ZW50SW5kZXhdLnN0eWxlLnpJbmRleCA9IGN1cnJlbnRaSW5kZXgudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFpJbmRleC0tOwogICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgcHJpbnRSZXN1bHQoYXJlQ29udGlndW91cyk7
Ci0gICAgICAgICAgICB9IC8vIGZvciBsCi0gICAgICAgICAgfSAvLyBmb3IgawotICAgICAgICB9
IC8vIGZvciBqCi0gICAgICB9IC8vIGZvciBpCi0KLSAgICAgIC8vIE5vdyBjaGVjayB0aGF0IHdl
IGRvbid0IHByb21vdGUgaWYgd2UgaGF2ZSBhbiBvdXQgb2YgZmxvdyBkZXNjZW5kYW50LgotICAg
ICAgLy8gV2UgbmVlZCB0byBoaWRlIHRoZSBwcmVkZWNlc3NvciBhbmQgc3VjY2Vzc29yIHNvIHRo
ZXkgZG9uJ3QgaW50ZXJmZXJlCi0gICAgICAvLyB3aXRoIHRoaXMgZXhwZXJpbWVudC4KLSAgICAg
IHByZWRlY2Vzc29yLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgICBzdWNjZXNzb3Iuc3R5
bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAg
ICAgICAgaWYgKGkgPT0gMCkKLSAgICAgICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAn
aGlkZGVuJzsKLSAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQotICAgICAgICAgIGRlc2NlbmRhbnQu
c3R5bGUuZGlzcGxheSA9ICcnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZGVzY2VuZGFudC5z
dHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotCi0gICAgICAgIC8vIElmIHRoZSBvdXQgb2YgZmxvdyBw
b3NpdGlvbmVkIGRlc2NlbmRhbnQgaXMgdmlzaWJsZSwgd2UgY2Fubm90IG9wdAotICAgICAgICAv
LyBpbnRvIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgotICAgICAgICBwcmludFJlc3VsdChpICE9IDEp
OwotICAgICAgICBjb3VudCsrOwotICAgICAgfSAvLyBmb3IgaQorICAgICAgICAgICAgICAgICAg
Y3VycmVudFpJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50SW5k
ZXggPSBjb250YWluZXJJbmRleCArIDE7IGN1cnJlbnRJbmRleCA8IDQ7ICsrY3VycmVudEluZGV4
KSB7CisgICAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW2N1cnJlbnRJbmRleF0uc3R5bGUueklu
ZGV4ID0gY3VycmVudFpJbmRleC50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50WkluZGV4Kys7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGlm
ICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGJlbG93LCB3aGVu
IHdlIHNldCB3ZWJraXRUcmFuc2Zvcm0gdG8gJycsIHdlIHdhbnQgdGhhdCB0byBmb3JjZSBhIHN0
eWxlIHJlY2FsY3VsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2luZyB0aGlzIG5v
dCAnJyBoZXJlIHdpbGwgZm9yY2UgdGhpcyByZWNhbGN1bGF0aW9uLgorICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVooMHB4KSc7
CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIGZvcmNlIHRvIG5vdCBwcm9tb3RlLgorICAgICAgICAgICAgICAgICAg
ICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JP
dmVyZmxvd1Njcm9sbEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBjb250YWlu
ZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJyc7CisKKyAgICAgICAgICAgICAgICAgICAgdmFy
IG9sZFN0YWNraW5nT3JkZXIgPSBnZXRTdGFja2luZ09yZGVyKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gZm9yY2UgdG8gcHJvbW90ZS4KKyAgICAgICAgICAgICAgICAgICAgd2luZG93Lmlu
dGVybmFscy5zZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3Jv
bGxFbmFibGVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2Vi
a2l0VHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVooMHB4KSc7CisKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG5ld1N0YWNraW5nT3JkZXIgPSBnZXRTdGFja2luZ09yZGVyKCk7CiAKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHNob3VsZE9wdEluID0gb2xkU3RhY2tpbmdPcmRlci5sZW5ndGggPT0gbmV3
U3RhY2tpbmdPcmRlci5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgb2xkU3RhY2tpbmdPcmRlci5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvbGRTdGFja2luZ09yZGVyW2ldICE9IG5ld1N0YWNraW5nT3JkZXJbaV0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3VsZE9wdEluID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJh
bnNmb3JtID0gJyc7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRPcHRJbiAhPSBkaWRP
cHRJbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE9wdEluKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZSgiRkFJTCAtIHNob3VsZCd2ZSBhdXRvbWF0aWNhbGx5
IG9wdGVkIGluIGJ1dCBkaWRuJ3QgIiArIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ0ZBSUwgLSBhdXRvbWF0aWNh
bGx5IG9wdGVkIGluIGFuZCBjaGFuZ2VkIHN0YWNraW5nIG9yZGVyICcgKyBjb3VudCk7CisgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CiAgICAgfSAvLyBmdW5jdGlvbiBkb1Rlc3QKIAorICAgIGZ1bmN0aW9uIHRvZ2dsZSgp
IHsKKyAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFp
bmVyJyk7CisgICAgICBjb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gY29udGFpbmVy
LnN0eWxlLndlYmtpdFRyYW5zZm9ybSA/ICcnIDogJ3RyYW5zbGF0ZVooMHB4KSc7CisKKyAgICAg
IC8vIEZvcmNlIGEgc3R5bGUgcmVjYWxjLgorICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7
CisKKyAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgd2luZG93LmludGVybmFscy5ib3Vu
ZGluZ0JveChjb250YWluZXIpOworICAgIH0KKwogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CiAgIDwvc2NyaXB0PgogPC9oZWFkPgogCiA8Ym9keT4K
LSAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InByZWRlY2Vzc29yIj48L2Rpdj4KLSAgPGRp
diBjbGFzcz0iY29udGFpbmVyIiBpZD0iY29udGFpbmVyIj4KLSAgICA8ZGl2IGNsYXNzPSJzY3Jv
bGxlZCIgaWQ9ImZpcnN0Q2hpbGQiPjwvZGl2PgotICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBp
ZD0ic2Vjb25kQ2hpbGQiPjwvZGl2PgotICAgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJk
ZXNjZW5kYW50Ij48L2Rpdj4KKyAgPGRpdiBpZD0iYW5jZXN0b3IiPgorICAgIDxkaXYgY2xhc3M9
InBvc2l0aW9uZWQiIGlkPSJwcmVkZWNlc3NvciI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29u
dGFpbmVyIiBpZD0iY29udGFpbmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0i
Zmlyc3RDaGlsZCI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIgaWQ9InNlY29u
ZENoaWxkIj48L2Rpdj4KKyAgICAgIDxkaXYgaWQ9Im5vcm1hbEZsb3ciPjwvZGl2PgorICAgIDwv
ZGl2PgorICAgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJzdWNjZXNzb3IiPjwvZGl2Pgog
ICA8L2Rpdj4KLSAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InN1Y2Nlc3NvciI+PC9kaXY+
CiAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogPC9ib2R5PgogPC9odG1sPgotCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVk
LXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0
aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4YzEwZGJhMWY4YWJhY2E0
ZGYyOTEzMTlhZjJlMmNiNzY3YTY5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9j
b21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlv
bmVkLWFuY2VzdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1Bhc3NlZCAtIGxheWVy
IHRyZWUuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29w
dC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3IuaHRtbCBiL0xh
eW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xs
aW5nLXBvc2l0aW9uZWQtYW5jZXN0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDIwNWFlOWRhYzU1NDBh
OThlMGJiZGQ1MDI4OGQzNjQ3ZDNjMDUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRp
b25lZC1hbmNlc3Rvci5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJM
SUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgImh0dHA6Ly93
d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFk
PgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsg
Y2hhcnNldD11dGYtOCIvPgorICA8dGl0bGU+T3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxp
bmc8L3RpdGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAg
IC5jb250YWluZXIgeworICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgaGVpZ2h0OiAyMDBweDsK
KyAgICAgIG92ZXJmbG93OiBzY3JvbGw7CisgICAgICBtYXJnaW46IDIwcHg7CisgICAgICBib3Jk
ZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICB9CisKKyAgICAuc2Nyb2xsZWQgeworICAgICAgd2lk
dGg6IDE4MHB4OworICAgICAgaGVpZ2h0OiA5MHB4OworICAgICAgbWFyZ2luOiAxMHB4OworICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAg
ICB9CisKKyAgICAucG9zaXRpb25lZCB7CisgICAgICB3aWR0aDogMTIwcHg7CisgICAgICBoZWln
aHQ6IDI0MHB4OworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIH0KKworICAgICNmaXJz
dENoaWxkIHsKKyAgICAgIHotaW5kZXg6IDE7CisgICAgfQorCisgICAgI3NlY29uZENoaWxkIHsK
KyAgICAgIHotaW5kZXg6IDI7CisgICAgfQorCisgICAgI3ByZWRlY2Vzc29yIHsKKyAgICAgIGxl
ZnQ6IDIwcHg7CisgICAgICB0b3A6IDIwcHg7CisgICAgICB6LWluZGV4OiAwOworICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgfQorCisgICAgI2FuY2VzdG9yIHsKKyAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGJsdWU7CisgICAgfQorCisgIDwvc3R5bGU+CisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgdmFyIGRlYnVnTW9kZSA9
IGZhbHNlOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgdGVzdFJ1bm5lci5k
dW1wQXNUZXh0KCk7CisKKyAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgIHdpbmRvdy5p
bnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Ny
b2xsRW5hYmxlZCh0cnVlKTsKKworICAgIGZ1bmN0aW9uIHdyaXRlKHN0cikKKyAgICB7CisgICAg
ICB2YXIgcHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICAgIHZh
ciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyICsgJ1xuJyk7CisgICAgICBwcmUu
YXBwZW5kQ2hpbGQodGV4dCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7
CisgICAgICB2YXIgcHJlZGVjZXNzb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlZGVj
ZXNzb3InKTsKKyAgICAgIHZhciBhbmNlc3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdh
bmNlc3RvcicpOworICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb250YWluZXInKTsKKyAgICAgIHZhciBmaXJzdENoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2ZpcnN0Q2hpbGQnKTsKKyAgICAgIHZhciBzZWNvbmRDaGlsZCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdzZWNvbmRDaGlsZCcpOworCisgICAgICAvLyBGb3JjZSBhIHN0eWxlIHJl
Y2FsYy4KKyAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICBpZiAod2luZG93
LmludGVybmFscykgeworICAgICAgICAvLyBGb3JjZSBhIGxheW91dC4KKyAgICAgICAgd2luZG93
LmludGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOworICAgICAgICB2YXIgbGF5ZXJUcmVl
ID0gd2luZG93LmludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQpOworCisgICAgICAg
IGlmICghbGF5ZXJUcmVlKQorICAgICAgICAgIHdyaXRlKCdGQUlMRUQgLSBubyBsYXllciB0cmVl
LicpCisgICAgICAgIGVsc2UKKyAgICAgICAgICB3cml0ZSgnUGFzc2VkIC0gbGF5ZXIgdHJlZS4n
KQorCisgICAgICAgIGlmIChsYXllclRyZWUgJiYgZGVidWdNb2RlKQorICAgICAgICAgICAgd3Jp
dGUobGF5ZXJUcmVlKTsKKyAgICAgIH0KKyAgICB9IC8vIGZ1bmN0aW9uIGRvVGVzdAorCisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgPC9zY3Jp
cHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0icHJl
ZGVjZXNzb3IiPjwvZGl2PgorICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0iYW5jZXN0b3Ii
PgorICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgaWQ9ImNvbnRhaW5lciI+CisgICAgICA8ZGl2
IGNsYXNzPSJzY3JvbGxlZCIgaWQ9ImZpcnN0Q2hpbGQiPjwvZGl2PgorICAgICAgPGRpdiBjbGFz
cz0ic2Nyb2xsZWQiIGlkPSJzZWNvbmRDaGlsZCI+PC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2
PgorICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDQ2YjFlOWJj
NWNjOTlmZGUzOTdhYzc4ZjEwZmViMDQ1NmVmOWYwZDcuLjcxNDdiMTExNmMzNzkzNjZhZGRhNjJm
ZjgzYmE5OTEzOTg5NWIyMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucwpAQCAtMzcwNCw2ICszNzA0LDEzIEBAIHdlYmtpdC5vcmcvYi8xMDMx
NTYgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9zY3Jv
bGxiYXJzCiAjIFJlcXVpcmVzIGFuIHVwZGF0ZWQgYmFzZWxpbmUgYWZ0ZXIgMTA2MTQyLgogd2Vi
a2l0Lm9yZy9iLzEwNjgyMCBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9jb21wb3NpdGVk
c2Nyb2xsaW5nL292ZXJmbG93L292ZXJmbG93LXNjcm9sbC5odG1sIFsgRmFpbHVyZSBdCiAKKyMg
TmVlZHMgcmViYXNlbGluZSBhZnRlciAxMDkzMDIuCit3ZWJraXQub3JnL2IvMTA5OTY1IHBsYXRm
b3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcvb3ZlcmZsb3cvdGV4
dGFyZWEtc2Nyb2xsLXRvdWNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xMDk5NjUg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9zb2Z0d2FyZWNvbXBvc2l0aW5nL292ZXJmbG93L3Rl
eHRhcmVhLXNjcm9sbC10b3VjaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTA5OTY1
IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcvc2Nyb2xs
YmFycy9vdmVyZmxvdy1zY3JvbGxiYXItY29tYmluYXRpb25zLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8xMDk5NjUgY29tcG9zaXRpbmcvb3ZlcmZsb3cvdGV4dGFyZWEtc2Nyb2xsLXRv
dWNoLmh0bWwgWyBGYWlsdXJlIF0KKworCiAjIEZhaWxzIGR1ZSB0byBCdWcgODU4NTYuCiB3ZWJr
aXQub3JnL2IvODU4NTYgWyBXaW4gTWFjIEFuZHJvaWQgXSBmYXN0L2Jsb2NrL2Zsb2F0LzAyOC5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODU4NTYgWyBXaW4gTWFjIEFu
ZHJvaWQgXSBmYXN0L2Jsb2NrL2Zsb2F0LzAyNi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191233</attachid>
            <date>2013-03-04 07:08:57 -0800</date>
            <delta_ts>2013-03-06 09:47:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130304100505.patch</filename>
            <type>text/plain</type>
            <size>54381</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZiM2I4ZWYxYTgzMTAw
ODUxMjI2ZWE5MjZmYzU4MDgwNzAxZjQxYS4uZDA4Nzc3YjkwZjkxNDAzOGM2OGY1OWMwODI0OGI3
M2ZhNDI3NzQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAzLTA0ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBJZiB0aGUgdHdvIGxpc3RzIGFy
ZSBpbiBmYWN0IHRoZSBzYW1lLCB0aGVuCisgICAgICAgIHdlIGtub3cgaXQgaXMgc2FmZSB0byBw
cm9tb3RlIHRoZSBsYXllciB0byBiZSBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhpcworICAgICAg
ICBzaG91bGQgYmUgbW9yZSBpbnR1aXRpdmUgYW5kIG1vcmUgcm9idXN0IHRoYW4gdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cv
b3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sCisg
ICAgICAgIFRlc3Q6IGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8t
Y29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6Cisg
ICAgICAgIFJlbmFtZWQgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIg
LT4KKyAgICAgICAgbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ2NvbnRhaW5lcgorICAgICAgICAo
V2ViQ29yZTo6aXNQb3NpdGlvbmVkQ29udGFpbmVyKToKKyAgICAgICAgTW92ZWQgaGlnaGVyIHVw
IGluIHRoZSBmaWxlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRT
dGFja2luZ09yZGVyRWxlbWVudEF0KToKKyAgICAgICAgR2V0IFJlbmRlckxheWVyIGF0IHN0YWNr
aW5nIG9yZGVyIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNh
bkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAgICBDb21wdXRlIHdoZXRoZXIgdGhlIGN1cnJl
bnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRvIGEgc3RhY2tpbmcKKyAgICAgICAgY29udGFpbmVy
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250
YWluZXJSZWN1cnNpdmVseSk6CisgICAgICAgIENvbXB1dGUgd2hldGhlciBhbGwgY2hpbGQgbGF5
ZXJzIGNhbiBiZSBwcm9tb3RlZCB0byBzdGFja2luZworICAgICAgICBjb250YWluZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAg
ICAgICBSZW5hbWVkIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyIC0+
CisgICAgICAgIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWluZXIKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVJc05vcm1hbEZsb3dPbmx5KToKKyAgICAgICAgUmVm
YWN0b3JlZCBsb2dpYyBmcm9tIHN0eWxlQ2hhbmdlZCB0byByZWZyZXNoIHRoZSBpc05vcm1hbEZs
b3dPbmx5CisgICAgICAgIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcpOgorICAgICAgICBBZGRlZCBjYWxsIHRvIHVwZGF0
ZUlzTm9ybWFsRmxvd09ubHkoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVMYXllckxpc3RzSWZOZWVkZWQpOgorICAgICAgICBVcGRhdGVkIHRvIGNhbGwgdXBkYXRlQ2Fu
QmVTdGFja2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KCkgaW5zdGVhZCBvZgorICAgICAgICB1cGRh
dGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5n
ZSk6CisgICAgICAgIFNtYWxsIGNvcnJlY3RuZXNzIGZpeDogaXNTdGFja2luZ0NvbnRleHQgY29u
ZGl0aW9ucyBzaG91bGQgYmUKKyAgICAgICAgaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2lu
Z0NvbnRhaW5lcigpCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAg
IChSZW5kZXJMYXllcik6CisKIDIwMTMtMDMtMDEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbU3R5bGVzXSBJbXBsZW1l
bnQgbmF2aWdhdGlvbiB0byBVSSBsb2NhdGlvbnMgb2YgcHJvcGVydHkgbmFtZXMvdmFsdWVzIGlu
IHRoZSBzb3VyY2UgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggOGEwZTBjNjc4ZWI4Yjg3MmE5M2ZmNzNlNDlhMGYzZTIxYTE5MDk2My4uYjllZDIyODBl
ZGEyMmVlZDYzZjgzNTVmMGE1YzhlY2Q3OGJkODI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgUmVuZGVyTGF5ZXI6OlJlbmRl
ckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlbmRlcmVyKQogICAgICwgbV9oYXNPdXRP
ZkZsb3dQb3NpdGlvbmVkRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzT3V0T2ZGbG93UG9z
aXRpb25lZERlc2NlbmRhbnREaXJ0eSh0cnVlKQogICAgICwgbV9uZWVkc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoZmFsc2UpCi0gICAgLCBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdP
cmRlcihmYWxzZSkKKyAgICAsIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWluZXIoZmFs
c2UpCiAgICAgLCBtX2lzUm9vdExheWVyKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkKICAgICAs
IG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkKICAgICAsIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0
aW9uKGZhbHNlKQpAQCAtNTM2LDE2MyArNTM2LDI3MSBAQCBib29sIFJlbmRlckxheWVyOjphY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkgY29uc3QKICAgICAg
ICAgJiYgcmVuZGVyZXIoKS0+ZnJhbWUoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCk7CiB9CiAKLS8vIElmIHdlIGFy
ZSBhIHN0YWNraW5nIGNvbnRhaW5lciwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgZGV0ZXJtaW5l
IGlmIG91cgotLy8gZGVzY2VuZGFudHMgZm9yIGEgY29udGlndW91cyBibG9jayBpbiBzdGFja2lu
ZyBvcmRlci4gVGhpcyBpcyByZXF1aXJlZCBpbgotLy8gb3JkZXIgZm9yIGFuIGVsZW1lbnQgdG8g
YmUgc2FmZWx5IHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVyLiBJdCBpcyBzYWZlCi0v
LyB0byBiZWNvbWUgYSBzdGFja2luZyBjb250YWluZXIgaWYgdGhpcyBjaGFuZ2Ugd291bGQgbm90
IGFsdGVyIHRoZSBzdGFja2luZwotLy8gb3JkZXIgb2YgbGF5ZXJzIG9uIHRoZSBwYWdlLiBUaGF0
IGNhbiBvbmx5IGhhcHBlbiBpZiBhIG5vbi1kZXNjZW5kYW50IGFwcGVhcgotLy8gYmV0d2VlbiB1
cyBhbmQgb3VyIGRlc2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLiBIZXJlJ3MgYW4gZXhhbXBs
ZToKLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMKLS8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvICB8ICBcLgotLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQSAgIEIgICBDCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9c
ICAgfCAgIC9cLgotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLTggIEQgIDIgIDcK
LS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNQotLy8KLS8vIEkndmUgbGFiZWxlZCBvdXIgbm9ybWFsIGZs
b3cgZGVzY2VuZGFudHMgQSwgQiwgQywgYW5kIEQsIG91ciBzdGFja2luZwotLy8gY29udGFpbmVy
IGRlc2NlbmRhbnRzIHdpdGggdGhlaXIgeiBpbmRpY2VzLCBhbmQgdXMgd2l0aCAndGhpcycgKHdl
J3JlIGEKLS8vIHN0YWNraW5nIGNvbnRhaW5lciBhbmQgb3VyIHpJbmRleCBkb2Vzbid0IG1hdHRl
ciBoZXJlKS4gVGhlc2Ugbm9kZXMgYXBwZWFyIGluCi0vLyB0aHJlZSBsaXN0czogcG9zWk9yZGVy
LCBuZWdaT3JkZXIsIGFuZCBub3JtYWwgZmxvdyAoa2VlcCBpbiBtaW5kIHRoYXQgbm9ybWFsCi0v
LyBmbG93IGxheWVycyBkb24ndCBvdmVybGFwKS4gU28gaWYgd2UgYXJyYW5nZSB0aGVzZSBsaXN0
cyBpbiBvcmRlciB3ZSBnZXQgb3VyCi0vLyBzdGFja2luZyBvcmRlcjoKLS8vCi0vLyAgICAgICAg
ICAgICAgICAgICAgIFstOF0sIFtBLURdLCBbMCwgMiwgNSwgN10tLT4gcG9zIHotb3JkZXIuCi0v
LyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAotLy8gICAgICAgIE5lZyB6LW9yZGVyLiA8
LSsgICAgICstLT4gTm9ybWFsIGZsb3cgZGVzY2VuZGFudHMuCi0vLwotLy8gV2UgY2FuIHRoZW4g
YXNzaWduIG5ldywgJ3N0YWNraW5nJyBvcmRlciBpbmRpY2VzIHRvIHRoZXNlIGVsZW1lbnRzIGFz
IGZvbGxvd3M6Ci0vLwotLy8gICAgICAgICAgICAgICAgICAgICBbLThdLCBbQS1EXSwgWzAsIDIs
IDUsIDddCi0vLyAnU3RhY2tpbmcnIGluZGljZXM6ICAtMSAgICAgMCAgICAgMSAgMiAgMyAgNAot
Ly8KLS8vIE5vdGUgdGhhdCB0aGUgbm9ybWFsIGZsb3cgZGVzY2VuZGFudHMgY2FuIHNoYXJlIGFu
IGluZGV4IGJlY2F1c2UgdGhleSBkb24ndAotLy8gc3RhY2svb3ZlcmxhcC4gTm93IG91ciBwcm9i
bGVtIGJlY29tZXMgdmVyeSBzaW1wbGU6IGEgbGF5ZXIgY2FuIHNhZmVseSBiZWNvbWUKLS8vIGEg
c3RhY2tpbmcgY29udGFpbmVyIGlmIHRoZSBzdGFja2luZy1vcmRlciBpbmRpY2VzIG9mIGl0IGFu
ZCBpdHMgZGVzY2VuZGFudHMKLS8vIGFwcGVhciBpbiBhIGNvbnRpZ3VvdXMgYmxvY2sgaW4gdGhl
IGxpc3Qgb2Ygc3RhY2tpbmcgaW5kaWNlcy4gVGhpcyBwcm9ibGVtCi0vLyBjYW4gYmUgc29sdmVk
IHZlcnkgZWZmaWNpZW50bHkgYnkgY2FsY3VsYXRpbmcgdGhlIG1pbi9tYXggc3RhY2tpbmcgaW5k
aWNlcyBpbgotLy8gdGhlIHN1YnRyZWUsIGFuZCB0aGUgbnVtYmVyIHN0YWNraW5nIGNvbnRhaW5l
ciBkZXNjZW5kYW50cy4gT25jZSB3ZSBoYXZlIHRoaXMKLS8vIGluZm9ybWF0aW9uLCB3ZSBrbm93
IHRoYXQgdGhlIHN1YnRyZWUncyBpbmRpY2VzIGZvcm0gYSBjb250aWd1b3VzIGJsb2NrIGlmOgot
Ly8KLS8vICAgICAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rl
c2NlbmRhbnRzCi0vLwotLy8gU28gZm9yIG5vZGUgQSBpbiB0aGUgZXhhbXBsZSBhYm92ZSB3ZSB3
b3VsZCBoYXZlOgotLy8gICBtYXhTdGFja0luZGV4ID0gMQotLy8gICBtaW5TdGFja0luZGV4ID0g
LTEKLS8vICAgbnVtU0NEZWNlbmRhbnRzID0gMgotLy8KLS8vIGFuZCBzbywKLS8vICAgICAgIG1h
eFN0YWNrSW5kZXggLSBtaW5TdGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMKLS8vICA9PT0+
ICAgICAgICAgICAgICAgICAgICAgIDEgLSAoLTEpID09IDIKLS8vICA9PT0+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyID09IDIKLS8vCi0vLyAgU2luY2UgdGhpcyBpcyB0cnVlLCBBIGNh
biBzYWZlbHkgYmVjb21lIGEgc3RhY2tpbmcgY29udGFpbmVyLgotLy8gIE5vdywgZm9yIG5vZGUg
QyB3ZSBoYXZlOgotLy8KLS8vICAgbWF4U3RhY2tJbmRleCA9IDQKLS8vICAgbWluU3RhY2tJbmRl
eCA9IDAgPC0tIGJlY2F1c2UgQyBoYXMgc3RhY2tpbmcgaW5kZXggMC4KLS8vICAgbnVtU0NEZWNl
bmRhbnRzID0gMgorc3RhdGljIGlubGluZSBib29sIGlzUG9zaXRpb25lZENvbnRhaW5lcihjb25z
dCBSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5
ZXJSZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOworICAgIHJldHVybiBsYXllci0+aXNSb290
TGF5ZXIoKSB8fCBsYXllclJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+aGFzVHJh
bnNmb3JtKCk7Cit9CisKK2VudW0gU3RhY2tpbmdPcmRlckRpcmVjdGlvbiB7RnJvbVJpZ2h0LCBG
cm9tTGVmdH07CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRlQ2FuQmVTdGFja2luZ0Nv
bnRhaW5lciB0byBzaW1wbGlmeSBpbmRleGluZyBpbnRvCisvLyB0aGUgcG9zaXRpdmUgYW5kIG5l
Z2F0aXZlIHotb3JkZXIgbGlzdHMsIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlbSBib3RoCisv
LyBmcm9tIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQuCitzdGF0aWMgY29uc3QgUmVu
ZGVyTGF5ZXIqIGdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQoY29uc3QgVmVjdG9yPFJlbmRlckxh
eWVyKj4qIHBvc1pPcmRlckxpc3QsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3Jk
ZXJMaXN0LCBjb25zdCBTdGFja2luZ09yZGVyRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qgc2l6
ZV90IGluZGV4KQoreworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZSA9IG5lZ1pPcmRlckxp
c3QgPyBuZWdaT3JkZXJMaXN0LT5zaXplKCkgOiAwOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBG
cm9tTGVmdCkgeworICAgICAgICBpZiAoaW5kZXggPCBuZWdaT3JkZXJMaXN0U2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybiBuZWdaT3JkZXJMaXN0LT5hdChpbmRleCk7CisKKyAgICAgICAgcmV0dXJu
IHBvc1pPcmRlckxpc3QtPmF0KGluZGV4IC0gbmVnWk9yZGVyTGlzdFNpemUpOworICAgIH0KKwor
ICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QgPyBwb3NaT3JkZXJM
aXN0LT5zaXplKCkgOiAwOworCisgICAgaWYgKGluZGV4IDwgcG9zWk9yZGVyTGlzdFNpemUpCisg
ICAgICAgIHJldHVybiBwb3NaT3JkZXJMaXN0LT5hdChwb3NaT3JkZXJMaXN0U2l6ZSAtIGluZGV4
IC0gMSk7CisKKyAgICByZXR1cm4gbmVnWk9yZGVyTGlzdC0+YXQobmVnWk9yZGVyTGlzdFNpemUg
LSAocG9zWk9yZGVyTGlzdFNpemUgLSBpbmRleCkgLSAxKTsKK30KKworLy8gRGV0ZXJtaW5lIHdo
ZXRoZXIgdGhlIGN1cnJlbnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29u
dGFpbmVyLAorLy8gZ2l2ZW4gaXRzIGNsb3Nlc3Qgc3RhY2tpbmcgY29udGV4dCBhbmNlc3Rvci4g
V2UgZG8gdGhpcyBieSBjb21wdXRpbmcgd2hhdAorLy8gcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHot
b3JkZXIgbGlzdHMgd291bGQgbG9vayBsaWtlIGJlZm9yZSBhbmQgYWZ0ZXIKKy8vIHByb21vdGlv
biwgYW5kIGVuc3VyaW5nIHRoYXQgcHJvcGVyIHN0YWNraW5nIG9yZGVyIGlzIHByZXNlcnZlZCBi
ZXR3ZWVuIHRoZQorLy8gdHdvIHNldHMgb2YgbGlzdHMuCiAvLwotLy8gYW5kIHNvLAotLy8gICAg
ICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50cwotLy8g
ID09PT4gICAgICAgICAgICAgICAgICAgICAgICAgNCAtIDAgPT0gMgotLy8gID09PT4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQgPT0gMgorLy8gQSBmZXcgZXhhbXBsZXM6CisvLyBjID0g
Y3VycmVudExheWVyCisvLyAtID0gbmVnYXRpdmUgei1vcmRlciBjaGlsZCBvZiBjdXJyZW50TGF5
ZXIKKy8vICsgPSBwb3NpdGl2ZSB6LW9yZGVyIGNoaWxkIG9mIGN1cnJlbnRMYXllcgorLy8gYSA9
IHBvc2l0aW9uZWQgYW5jZXN0b3Igb2YgY3VycmVudExheWVyCisvLyB4ID0gYW55IG90aGVyIFJl
bmRlckxheWVyIGluIHRoZSBsaXN0CiAvLwotLy8gU2luY2UgdGhpcyBpcyBmYWxzZSwgQyBjYW5u
b3QgYmUgc2FmZWx5IHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVyLiBUaGlzCi0vLyBo
YXBwZW5lZCBiZWNhdXNlIG9mIHRoZSBlbGVtZW50cyB3aXRoIHotaW5kZXggNSBhbmQgMC4gTm93
IGlmIDUgaGFkIGJlZW4gYQotLy8gY2hpbGQgb2YgQyByYXRoZXIgdGhhbiBELCBhbmQgQSBoYWQg
bm8gY2hpbGQgd2l0aCBaIGluZGV4IDAsIHdlIHdvdWxkIGhhdmUgaGFkOgorLy8gKGEpIHh4eHh4
LS0tLS0rK2ErKyt4CisvLyAoYikgeHh4LS0tLS1jKysrKysreHgKIC8vCi0vLyAgIG1heFN0YWNr
SW5kZXggPSAzCi0vLyAgIG1pblN0YWNrSW5kZXggPSAwIDwtLSBiZWNhdXNlIEMgaGFzIHN0YWNr
aW5nIGluZGV4IDAuCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9IDMKIC8vCi0vLyBhbmQgc28sCi0v
LyAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rlc2NlbmRhbnRz
Ci0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gMCA9PSAzCi0vLyAgPT09PiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSAzCisvLyBOb3JtYWxseSB0aGUgY3VycmVu
dCBsYXllciB3b3VsZCBiZSBwYWludGVkIGluIHRoZSBub3JtYWwgZmxvdyBsaXN0IGlmIGl0Cisv
LyBkb2Vzbid0IGFscmVhZHkgYXBwZWFyIGluIHRoZSBwb3NpdGl2ZSB6LW9yZGVyIGxpc3QuIEhv
d2V2ZXIsIGluIHRoZSBjYXNlCisvLyB0aGF0IHRoZSBsYXllciBoYXMgYSBwb3NpdGlvbmVkIGFu
Y2VzdG9yLCBpdCB3aWxsIHBhaW50IGRpcmVjdGx5IGFmdGVyIHRoZQorLy8gcG9zaXRpb25lZCBh
bmNlc3Rvci4gSW4gZXhhbXBsZSAoYSksIHRoZSBjdXJyZW50IGxheWVyIHdvdWxkIGJlIHBhaW50
ZWQgaW4KKy8vIHRoZSBtaWRkbGUgb2YgaXRzIG93biBwb3NpdGl2ZSB6LW9yZGVyIGNoaWxkcmVu
LCBzbyBwcm9tb3Rpbmcgd291bGQgY2F1c2UgYQorLy8gY2hhbmdlIGluIHBhaW50IG9yZGVyIChz
aW5jZSBhIHByb21vdGVkIGxheWVyIHdpbGwgcGFpbnQgYWxsIG9mIGl0cyBwb3NpdGl2ZQorLy8g
ei1vcmRlciBjaGlsZHJlbiBzdHJpY3RseSBhZnRlciBpdCBwYWludHMgaXRzZWxmKS4KIC8vCi0v
LyAgQW5kIHdlIHdvdWxkIGNvbmNsdWRlIHRoYXQgQyBjb3VsZCBiZSBwcm9tb3RlZC4KLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRl
cigpCi17Ci0gICAgaWYgKCFpc1N0YWNraW5nQ29udGV4dCgpIHx8ICFhY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKCkpCisvLyBJbiBleGFtcGxlIChiKSwgaXQg
aXMgb2sgdG8gcHJvbW90ZSB0aGUgY3VycmVudCBsYXllciBvbmx5IGlmIGl0IGRvZXMgbm90Cisv
LyBoYXZlIGEgYmFja2dyb3VuZC4gSWYgaXQgaGFzIGEgYmFja2dyb3VuZCwgdGhlIGJhY2tncm91
bmQgZ2V0cyBwYWludGVkIGJlZm9yZQorLy8gdGhlIGxheWVyJ3MgbmVnYXRpdmUgei1vcmRlciBj
aGlsZHJlbiwgc28gYWdhaW4sIGEgcHJvbW90aW9uIHdvdWxkIGNhdXNlIGEKKy8vIGNoYW5nZSBp
biBwYWludCBvcmRlciAoY2F1c2luZyB0aGUgYmFja2dyb3VuZCB0byBnZXQgcGFpbnRlZCBhZnRl
ciB0aGUKKy8vIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRyZW4gaW5zdGVhZCBvZiBiZWZvcmUpLgor
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcihSZW5kZXJMYXll
ciogYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpCit7CisgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCghbV9ub3JtYWxGbG93TGlzdERpcnR5
KTsKLSAgICBBU1NFUlQoIW1fek9yZGVyTGlzdHNEaXJ0eSk7CisgICAgLy8gRklYTUU6IFdlIGNh
biBlYXJseS1vdXQgb2YgdGhpcyBmdW5jdGlvbiBtb3JlCisgICAgLy8gb2Z0ZW4gaWYgd2UgbWFp
bnRhaW4gYSBkaXJ0eSBiaXQgZm9yIHRoZQorICAgIC8vIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tp
bmdDb250YWluZXIgcHJvcGVydHkKKyAgICAvLyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTk2NikKIAotICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+
IHBvc1pPcmRlckxpc3Q7Ci0gICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4gbmVnWk9y
ZGVyTGlzdDsKLSAgICByZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tpbmdDb250ZXh0cywg
cG9zWk9yZGVyTGlzdCwgbmVnWk9yZGVyTGlzdCk7CisgICAgdXBkYXRlTm9ybWFsRmxvd0xpc3Qo
KTsKIAotICAgIC8vIENyZWF0ZSBhIHJldmVyc2UgbG9va3VwLgotICAgIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyTGF5ZXIqLCBpbnQ+IGxvb2t1cDsKKyAgICBBU1NFUlQoIW1fbm9ybWFsRmxvd0xpc3RE
aXJ0eSk7CiAKLSAgICBpZiAobmVnWk9yZGVyTGlzdCkgewotICAgICAgICBpbnQgc3RhY2tpbmdP
cmRlckluZGV4ID0gLTE7Ci0gICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3Qt
PnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogY3VycmVudExheWVyID0gbmVnWk9yZGVyTGlzdC0+
YXQobGlzdFNpemUgLSBpIC0gMSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRMYXllci0+aXNT
dGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGxvb2t1cC5zZXQoY3VycmVudExheWVyLCBzdGFja2luZ09yZGVySW5kZXgtLSk7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4gcG9zWk9yZGVyTGlz
dEJlZm9yZVByb21vdGU7CisgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4gbmVnWk9y
ZGVyTGlzdEJlZm9yZVByb21vdGU7CisgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4g
cG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVy
Kj4gPiBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlOwogCi0gICAgaWYgKHBvc1pPcmRlckxpc3Qp
IHsKLSAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpOwotICAg
ICAgICBpbnQgc3RhY2tpbmdPcmRlckluZGV4ID0gMTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogY3VycmVu
dExheWVyID0gcG9zWk9yZGVyTGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRM
YXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGxvb2t1cC5zZXQoY3VycmVudExheWVyLCBzdGFja2luZ09yZGVySW5kZXgrKyk7
CisgICAgLy8gV2UgY2FuJ3QgdXNlIFRlbXBvcmFyeUNoYW5nZTw+IGhlcmUgc2luY2UgbV9uZWVk
c0NvbXBvc2l0ZWRTY3JvbGxpbmcgYW5kCisgICAgLy8gbV9pc05vcm1hbEZsb3dPbmx5IGFyZSBi
b3RoIGJpdGZpZWxkcywgc28gd2UgaGF2ZSB0byBkbyBpdCB0aGUKKyAgICAvLyBvbGQtZmFzaGlv
bmVkIHdheS4KKyAgICBib29sIG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IG1fbmVlZHND
b21wb3NpdGVkU2Nyb2xsaW5nOworICAgIGJvb2wgb2xkSXNOb3JtYWxGbG93T25seSA9IG1faXNO
b3JtYWxGbG93T25seTsKKworICAgIC8vIFNldCB0aGUgZmxhZyBvbiB0aGUgY3VycmVudCBsYXll
ciwgdGhlbiByZWJ1aWxkIGFuY2VzdG9yIHN0YWNraW5nCisgICAgLy8gY29udGV4dCdzIGxpc3Rz
LiBUaGlzIHdheSwgd2UgY2FuIHNlZSB0aGUgZXhhY3QgZWZmZWN0cyB0aGF0IHByb21vdGluZwor
ICAgIC8vIHRoaXMgbGF5ZXIgd291bGQgY2F1c2UuCisgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0g
dHJ1ZTsKKyAgICBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGZhbHNlOworICAgIGFuY2Vz
dG9yU3RhY2tpbmdDb250ZXh0LT5yZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tpbmdDb250
YWluZXJzLCBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwgbmVnWk9yZGVyTGlzdEJlZm9yZVBy
b21vdGUpOworCisgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gZmFsc2U7CisgICAgbV9uZWVkc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcgPSB0cnVlOworICAgIGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0LT5y
ZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tpbmdDb250YWluZXJzLCBwb3NaT3JkZXJMaXN0
QWZ0ZXJQcm9tb3RlLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlKTsKKworICAgIG1fbmVlZHND
b21wb3NpdGVkU2Nyb2xsaW5nID0gb2xkTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOworICAgIG1f
aXNOb3JtYWxGbG93T25seSA9IG9sZElzTm9ybWFsRmxvd09ubHk7CisKKyAgICBzaXplX3QgcG9z
Wk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlID0gcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUg
PyBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZS0+c2l6ZSgpIDogMDsKKyAgICBzaXplX3QgbmVn
Wk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlID0gbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGUg
PyBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZS0+c2l6ZSgpIDogMDsKKyAgICBzaXplX3QgcG9z
Wk9yZGVyTGlzdFNpemVBZnRlclByb21vdGUgPSBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlID8g
cG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZS0+c2l6ZSgpIDogMDsKKyAgICBzaXplX3QgbmVnWk9y
ZGVyTGlzdFNpemVBZnRlclByb21vdGUgPSBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlID8gbmVn
Wk9yZGVyTGlzdEFmdGVyUHJvbW90ZS0+c2l6ZSgpIDogMDsKKworICAgIGJvb2wgaGFzQmFja2dy
b3VuZCA9IHJlbmRlcmVyKCktPmhhc0JhY2tncm91bmQoKTsKKyAgICBib29sIHdlQXJlUG9zaXRp
b25lZCA9IHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpOworCisgICAgY29uc3QgUmVuZGVyTGF5
ZXIqIHBvc2l0aW9uZWRBbmNlc3RvciA9IHBhcmVudCgpOworICAgIHdoaWxlIChwb3NpdGlvbmVk
QW5jZXN0b3IgJiYgIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3NpdGlvbmVkQW5jZXN0b3IpICYm
ICFwb3NpdGlvbmVkQW5jZXN0b3ItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgIHBvc2l0
aW9uZWRBbmNlc3RvciA9IHBvc2l0aW9uZWRBbmNlc3Rvci0+cGFyZW50KCk7CisgICAgaWYgKHBv
c2l0aW9uZWRBbmNlc3RvciAmJiAoIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3NpdGlvbmVkQW5j
ZXN0b3IpIHx8IHBvc2l0aW9uZWRBbmNlc3Rvci0+aXNTdGFja2luZ0NvbnRleHQoKSkpCisgICAg
ICAgIHBvc2l0aW9uZWRBbmNlc3RvciA9IDA7CisKKyAgICAvLyBJbnNlcnQgdGhpcyBpbnRvIHRo
ZSBwb3NaT3JkZXJpc3RCZWZvcmVQcm9tb3RlIGRpcmVjdGx5IGFmdGVyIHRoZQorICAgIC8vIHBv
c2l0aW9uZWQgYW5jZXN0b3IsIGlmIHRoZXJlIGlzIG9uZS4gT3RoZXJ3aXNlLCBhZGQgaXQgdG8g
dGhlIHZlcnkKKyAgICAvLyBiZWdpbm5pbmcuCisgICAgLy8KKyAgICAvLyBUaGUgY3VycmVudCBs
YXllciB3aWxsIGFwcGVhciBpbiB0aGUgei1vcmRlciBsaXN0cyBhZnRlciBwcm9tb3Rpb24sIHNv
CisgICAgLy8gZm9yIGEgbWVhbmluZ2Z1bCBjb21wYXJpc29uLCB3ZSBtdXN0IGluc2VydCBpdCBp
biB0aGUgei1vcmRlciBsaXN0cworICAgIC8vIGJlZm9yZSBwcm9tb3Rpb24gaWYgaXQgZG9lcyBu
b3QgYXBwZWFyIHRoZXJlIGFscmVhZHkuCisgICAgaWYgKCF3ZUFyZVBvc2l0aW9uZWQpIHsKKyAg
ICAgICAgaWYgKCFwb3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgIGlmICghcG9zWk9y
ZGVyTGlzdEJlZm9yZVByb21vdGUpCisgICAgICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9y
ZVByb21vdGUgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlbmRlckxheWVyKj4oKSk7CisKKyAgICAg
ICAgICAgIHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5wcmVwZW5kKHRoaXMpOworICAgICAg
ICAgICAgcG9zWk9yZGVyTGlzdFNpemVCZWZvcmVQcm9tb3RlKys7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcG9zWk9yZGVyTGlz
dFNpemVCZWZvcmVQcm9tb3RlOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHBvc1pP
cmRlckxpc3RCZWZvcmVQcm9tb3RlLT5hdChpbmRleCkgPT0gcG9zaXRpb25lZEFuY2VzdG9yKSB7
CisgICAgICAgICAgICAgICAgICAgIHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5pbnNlcnQo
aW5kZXggKyAxLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVyTGlzdFNpemVC
ZWZvcmVQcm9tb3RlKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGludCBtaW5JbmRl
eCA9IDA7Ci0gICAgaW50IG1heEluZGV4ID0gMDsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIGJv
b2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotICAgIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGln
dW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShsb29rdXAsIG1pbkluZGV4LCBtYXhJbmRleCwg
Y291bnQsIGZpcnN0SXRlcmF0aW9uKTsKLX0KKyAgICBzaXplX3Qgc2l6ZUJlZm9yZVByb21vdGUg
PSBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgKyBuZWdaT3JkZXJMaXN0U2l6ZUJlZm9y
ZVByb21vdGU7CisgICAgc2l6ZV90IHNpemVBZnRlclByb21vdGUgPSBwb3NaT3JkZXJMaXN0U2l6
ZUFmdGVyUHJvbW90ZSArIG5lZ1pPcmRlckxpc3RTaXplQWZ0ZXJQcm9tb3RlOwogCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJS
ZWN1cnNpdmUoY29uc3QgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIGludD4mIGxvb2t1cCwg
aW50JiBtaW5JbmRleCwgaW50JiBtYXhJbmRleCwgaW50JiBjb3VudCwgYm9vbCBmaXJzdEl0ZXJh
dGlvbikKLXsKLSAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQoKSAmJiAhZmlyc3RJdGVyYXRpb24p
IHsKLSAgICAgICAgaWYgKGxvb2t1cC5jb250YWlucyh0aGlzKSkgewotICAgICAgICAgICAgbWlu
SW5kZXggPSBzdGQ6Om1pbihtaW5JbmRleCwgbG9va3VwLmdldCh0aGlzKSk7Ci0gICAgICAgICAg
ICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBsb29rdXAuZ2V0KHRoaXMpKTsKLSAgICAg
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBi
b29sIGNhblByb21vdGUgPSB0cnVlOwogCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGludCBjaGlsZE1pbkluZGV4ID0gMDsKLSAgICAgICAgaW50IGNoaWxkTWF4SW5kZXggPSAw
OwotICAgICAgICBpbnQgY2hpbGRDb3VudCA9IDA7Ci0gICAgICAgIGNoaWxkLT51cGRhdGVEZXNj
ZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUobG9va3VwLCBjaGls
ZE1pbkluZGV4LCBjaGlsZE1heEluZGV4LCBjaGlsZENvdW50LCBmYWxzZSk7Ci0gICAgICAgIGlm
IChjaGlsZENvdW50KSB7Ci0gICAgICAgICAgICBjb3VudCArPSBjaGlsZENvdW50OwotICAgICAg
ICAgICAgbWluSW5kZXggPSBzdGQ6Om1pbihtaW5JbmRleCwgY2hpbGRNaW5JbmRleCk7Ci0gICAg
ICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBjaGlsZE1heEluZGV4KTsKKyAg
ICAvLyBBZnRlciBwcm9tb3Rpb24sIHRoZSBwYWludCBvcmRlciBjb25zaXN0cyBvZiAKKyAgICAv
LyBhKSB0aGUgbm9uLWRlc2NlbmRhbnRzIHdoaWNoIHByZWNlZGUgdGhlIHByb21vdGVkIGxheWVy
LCAKKyAgICAvLyBiKSB0aGUgcHJvbW90ZWQgbGF5ZXIsIGFuZCAKKyAgICAvLyBjKSB0aGUgbm9u
LWRlc2NlbmRhbnRzIHdoaWNoIHN1Y2NlZWQgdGhlIHByb21vdGVkIGxheWVyLiAKKyAgICAvLwor
ICAgIC8vIElmIHRoZSBjdXJyZW50IGxheWVyJ3MgZGVzY2VuZGFudHMgZm9ybSBhIGNvbnRpZ3Vv
dXMgYmxvY2sgaW4gcGFpbnQgb3JkZXIKKyAgICAvLyBiZWZvcmUgcHJvbW90aW9uLCB0aGUgcGFp
bnQgb3JkZXIgd2lsbCBjb25zaXN0IG9mCisgICAgLy8gYSkgdGhlIG5vbi1kZXNjZW5kYW50cyB3
aGljaCBwcmVjZWRlIHRoZSBjdXJyZW50IGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMsIAorICAg
IC8vIGIpIHRoZSBjdXJyZW50IGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMgCisgICAgLy8gYykg
VGhlIG5vbi1kZXNjZW5kYW50cyB3aGljaCBzdWNjZWVkIHRoZSBjdXJyZW50IGxheWVyIGFuZCBp
dHMgZGVzY2VuZGFudHMuCisgICAgLy8KKyAgICAvLyBTdWItbGlzdHMgKGEpIGFuZCAoYykgc2hv
dWxkIGJlIGlkZW50aWNhbCBpbiBib3RoIHBhaW50IG9yZGVyIGxpc3RzIGlmCisgICAgLy8gYW5k
IG9ubHkgaWYgdGhlIGRlc2NlbmRhbnRzIGZvcm0gYSBjb250aWd1b3VzIGJsb2NrLiBJbiBmYWN0
LCB0aGlzIGlzIHRoZQorICAgIC8vIG9ubHkgY2hlY2sgd2UgbmVlZCB0byBwZXJmb3JtIHNpbmNl
IHRoZSBvcmRlciBvZiB0aGUgZGVzY2VuZGFudHMgd2l0aAorICAgIC8vIHJlc3BlY3QgdG8gZWFj
aCBvdGhlciBjYW5ub3QgYmUgYWZmZWN0ZWQgYnkgcHJvbW90aW9uIChpLmUuLCB3ZSBkb24ndAor
ICAgIC8vIG5lZWQgdG8gd29ycnkgYWJvdXQgc3ViLWxpc3QgKGIpKS4KKyAgICAvLworICAgIC8v
IFNvbWUgZXhhbXBsZXM6CisgICAgLy8gQyA9IGN1cnJlbnRMYXllcgorICAgIC8vIC0gPSBuZWdh
dGl2ZSB6LW9yZGVyIGNoaWxkIG9mIGN1cnJlbnRMYXllcgorICAgIC8vICsgPSBwb3NpdGl2ZSB6
LW9yZGVyIGNoaWxkIG9mIGN1cnJlbnRMYXllcgorICAgIC8vIEEgPSBwb3NpdGlvbmVkIGFuY2Vz
dG9yIG9mIGN1cnJlbnRMYXllcgorICAgIC8vIHggPSBhbnkgb3RoZXIgUmVuZGVyTGF5ZXIgaW4g
dGhlIGxpc3QKKyAgICAvLworICAgIC8vICAgICAgICBvcmlnaW5hbCAgICAgICAgICAgICAgICAg
ICAgfCAgIHpPcmRlckxpc3RCZWZvcmVQcm9tb3RlICAgIHwgIHpPcmRlckxpc3RBZnRlclByb21v
dGUKKyAgICAvLyAgICAgICAgek9yZGVyTGlzdEJlZm9yZVByb21vdGUgICAgIHwgIGFmdGVyIGlu
c2VydGluZyBDIGFzIGFib3ZlICB8CisgICAgLy8gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vICgxKSAgICAgeC0tLSsrK3ggICAgICAgICAgICAgICAgICAgfCAgeC0t
LUMrKyt4ICAgICAgICAgICAgICAgICAgIHwgICAgIHhDeAorICAgIC8vICgyKSAgICAgeC0tLStB
Kyt4ICAgICAgICAgICAgICAgICAgfCAgeC0tLStBQysreCAgICAgICAgICAgICAgICAgIHwgICAg
IHhBQ3gKKyAgICAvLyAoMykgICAgIHgteC0tKysreCAgICAgICAgICAgICAgICAgIHwgIHgteC0t
QysrK3ggICAgICAgICAgICAgICAgICB8ICAgICB4eEN4CisgICAgLy8gKDQpICAgICB4eEErK3gg
ICAgICAgICAgICAgICAgICAgICB8ICB4eEFDKyt4ICAgICAgICAgICAgICAgICAgICAgfCAgICAg
eHhBQ3gKKyAgICAvLworICAgIC8vIEluIGV4YW1wbGUgKDEpLCB3ZSBjb21wYXJlIHN1Yi1saXN0
IChhKSBieSBtYXJjaGluZyBmcm9tIHRoZSBsZWZ0IG9mIGJvdGgKKyAgICAvLyBsaXN0cyAoek9y
ZGVyTGlzdEJlZm9yZVByb21vdGUgYWZ0ZXIgaW5zZXJ0aW5nIEMgYW5kCisgICAgLy8gek9yZGVy
TGlzdEFmdGVyUHJvbW90ZSkuIFRoZSBmaXJzdCBtaXNtYXRjaCBpcyBhdCBpbmRleCAxIHdoZW4g
d2UgaGl0ICctJworICAgIC8vIGFuZCAnQycuIFRoYXQgbWVhbnMgd2UgaGF2ZSBuZWcgei1vcmRl
ciBkZXNjZW5kYW50cy4gVGhpcyBpcyBhIHByb2JsZW0gaWYKKyAgICAvLyB3ZSBoYXZlIGEgYmFj
a2dyb3VuZC4gQmVmb3JlIHByb21vdGlvbiwgdGhpcyBiZyB3b3VsZCBnZXQgcGFpbnRlZCB3aXRo
CisgICAgLy8gdGhlIGN1cnJlbnQgbGF5ZXIgKGkuZS4sIGFmdGVyIHRoZSBuZWcgei1vcmRlciBk
ZXNjZW5kYW50cyksIGJ1dCBhZnRlcgorICAgIC8vIHByb21vdGlvbiB0aGUgYmcgd291bGQgZ2V0
IHBhaW50ZWQgYmVmb3JlIHRoZW0uIFRoaXMgaXMgYSBzdGFja2luZyBvcmRlcgorICAgIC8vIHZp
b2xhdGlvbiBhbmQgd2UgY2FuJ3QgcHJvbW90ZS4gSG93ZXZlciwgaWYgd2UgZG9uJ3QgaGF2ZSBh
IGJhY2tncm91bmQsCisgICAgLy8gd2Ugd291bGQgY29udGludWUgb24gdG8gdGhlIHNlY29uZCBw
YXNzLiBXaGVuIGNvbXBhcmluZyBmcm9tIHRoZSByaWdodCwKKyAgICAvLyB3ZSBtaXNtYXRjaCBv
biAnKycgYW5kICdDJy4gU2luY2Ugd2UgaGl0ICdDJyBvbiB6T3JkZXJMaXN0QWZ0ZXJQcm9tb3Rl
LAorICAgIC8vIHdlIGtub3cgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGNvbnRpZ3VvdXMsIGFuZCB3
ZSB3aWxsIHByb21vdGUuCisgICAgLy8KKyAgICAvLyBJbiBleGFtcGxlICgyKSwgd2hlbiBtYXJj
aGluZyBmcm9tIHRoZSBsZWZ0LCB3ZSdsbCBoaXQgYSBtaXNtYXRjaCBhZ2FpbgorICAgIC8vIG9u
IHRoZSBzZWNvbmQgZWxlbWVudCB3ZSBsb29rIGF0LiBUaGlzIHRpbWUsIHNpbmNlIHRoaXMgZWxl
bWVudCBpcyBhbiAnYScKKyAgICAvLyBpbiB6T3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLCB0aGlzIGlu
ZGljYXRlcyB0aGF0IHRoZXJlIGlzIGFuIGV4dHJhIGxheWVyCisgICAgLy8gKHRoZSAnQScpIG1p
eGVkIGluIHdpdGggdGhlIGNoaWxkcmVuLiBUaGlzIGNvdWxkIGNhdXNlIGEgY2hhbmdlIGluIHBh
aW50CisgICAgLy8gb3JkZXIgaWYgd2UgcHJvbW90ZSwgc28gd2UgZGVjaWRlIG5vdCB0byBhbmQg
YnJlYWsgb3V0IG9mIHRoZSBsb29wLiBOb3RlCisgICAgLy8gdGhhdCBpZiB0aGUgY3VycmVudCBs
YXllciBoYXMgYSBiYWNrZ3JvdW5kLCB0aGlzIHdvdWxkIHByb3ZpZGUgYSBzZWNvbmQKKyAgICAv
LyByZWFzb24gbm90IHRvIG9wdCBpbiwgc2luY2UgYWdhaW4gd2UgaGF2ZSBuZWdhdGl2ZSB6LW9y
ZGVyIGNoaWxkcmVuIHdobworICAgIC8vIHdvdWxkIGNoYW5nZSBwYWludCBvcmRlciB3aXRoIHJl
c3BlY3QgdG8gb3VyIGJhY2tncm91bmQgaWYgd2UgcHJvbW90ZWQuCisgICAgLy8KKyAgICAvLyBJ
biBleGFtcGxlICgzKSwgdGhlIGRpc2NvbnRpZ3VpdHkgb2YgdGhlIG5lZ2F0aXZlIHotb3JkZXIg
Y2hpbGRyZW4gY2F1c2VzCisgICAgLy8gdXMgdG8gZmFpbCBlYXJseSBpbiBvdXIgIkZyb21MZWZ0
IiBwYXNzIHdoZW4gd2UgdHJ5IHRvIGNvbXBhcmUgJy0nIGZyb20KKyAgICAvLyB6T3JkZXJMaXN0
QmVmb3JlUHJvbW90ZSB3aXRoICd4JyBpbiB6T3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLgorICAgIC8v
CisgICAgLy8gRmluYWxseSBpbiBleGFtcGxlICg0KSwgd2Ugd291bGQgbWF0Y2ggJ3h4QUMnIGZy
b20gdGhlIGxlZnQsIHRoZW4gc3RvcAorICAgIC8vIHNpbmNlIHdlIGhpdCAnQycuIFRoZW4gd2Ug
d291bGQgbWF0Y2ggJ3gnIGZyb20gdGhlIHJpZ2h0LCBhbmQgbWlzbWF0Y2gKKyAgICAvLyBvbiAn
KycgYW5kICdDJy4gU2luY2Ugd2UncmUgYXQgJ0MnIG9uIHRoZSB6T3JkZXJMaXN0QWZ0ZXJQcm9t
b3RlLCB3ZQorICAgIC8vIGNvbmNsdWRlIHRoYXQgYWxsIHRoZSBjaGlsZHJlbiBhcmUgY29udGln
dW91cy4gU2luY2UgdGhlcmUgYXJlIG5vCisgICAgLy8gbmVnYXRpdmUgei1vcmRlciBjaGlsZHJl
biwgYSBiYWNrZ3JvdW5kIGxheWVyIGlzIGlycmVsZXZhbnQgaW4gdGhpcyBjYXNlLgorICAgIC8v
IFdlIHdpbGwgb3B0IGluLCBrZWVwaW5nIHBhaW50IG9yZGVyIGNvbnN0YW50LgorICAgIGZvciAo
aW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisgICAgICAgIFN0YWNraW5nT3JkZXJE
aXJlY3Rpb24gZGlyZWN0aW9uID0gcGFzcyA/IEZyb21MZWZ0IDogRnJvbVJpZ2h0OworCisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplQmVmb3JlUHJvbW90ZSAmJiBp
bmRleCA8IHNpemVBZnRlclByb21vdGU7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGNvbnN0IFJl
bmRlckxheWVyKiBsYXllckJlZm9yZVByb21vdGUgPSBnZXRTdGFja2luZ09yZGVyRWxlbWVudEF0
KHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLmdldCgpLCBuZWdaT3JkZXJMaXN0QmVmb3JlUHJv
bW90ZS5nZXQoKSwgZGlyZWN0aW9uLCBpbmRleCk7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJM
YXllciogbGF5ZXJBZnRlclByb21vdGUgPSBnZXRTdGFja2luZ09yZGVyRWxlbWVudEF0KHBvc1pP
cmRlckxpc3RBZnRlclByb21vdGUuZ2V0KCksIG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGUuZ2V0
KCksIGRpcmVjdGlvbiwgaW5kZXgpOworCisgICAgICAgICAgICBpZiAobGF5ZXJCZWZvcmVQcm9t
b3RlICE9IGxheWVyQWZ0ZXJQcm9tb3RlKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZmlu
ZCBhIG1pc21hdGNoLCB0aGUgb25seSBzaXR1YXRpb24gd2hlcmUgd2UgaGF2ZW4ndAorICAgICAg
ICAgICAgICAgIC8vIG5lY2Vzc2FyaWx5IGNoYW5nZWQgcGFpbnQgb3JkZXIgeWV0IGlzIGlmIGxh
eWVyQWZ0ZXJQcm9tb3RlCisgICAgICAgICAgICAgICAgLy8gaXMgdGhpcy4KKyAgICAgICAgICAg
ICAgICBpZiAobGF5ZXJBZnRlclByb21vdGUgIT0gdGhpcykgeworICAgICAgICAgICAgICAgICAg
ICBjYW5Qcm9tb3RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFsc28sIGlmIHRoZSBjdXJyZW50IGxh
eWVyIGhhcyBhIGJhY2tncm91bmQsIHRoZW4gYW55CisgICAgICAgICAgICAgICAgLy8gbmVnYXRp
dmUgei1vcmRlciBjaGlsZHJlbiB3aWxsIGdldCBiZXR3ZWVuIHRoZSBiYWNrZ3JvdW5kCisgICAg
ICAgICAgICAgICAgLy8gYW5kIHRoZSByZXN0IG9mIHRoZSBsYXllci4KKyAgICAgICAgICAgICAg
ICBpZiAoZGlyZWN0aW9uID09IEZyb21MZWZ0ICYmIGhhc0JhY2tncm91bmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FuUHJvbW90ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChs
YXllckFmdGVyUHJvbW90ZSA9PSB0aGlzKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFjYW5Qcm9tb3RlKQorICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgaWYgKCFpc1N0YWNraW5nQ29udGV4dCgpKSB7Ci0gICAgICAgIGJvb2wgbmV3VmFs
dWUgPSBtYXhJbmRleCAtIG1pbkluZGV4ID09IGNvdW50OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICAgICAgYm9vbCBkaWRVcGRhdGUgPSBuZXdWYWx1ZSAhPSBtX2Rlc2Nl
bmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcjsKKyAgICBib29sIGRpZFVwZGF0ZSA9
IChjYW5Qcm9tb3RlICE9IG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWluZXIpOwogI2Vu
ZGlmCi0gICAgICAgIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyID0g
bmV3VmFsdWU7CisKKyAgICBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVyID0gY2Fu
UHJvbW90ZTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgaWYg
KGRpZFVwZGF0ZSkKLSAgICAgICAgICAgIHVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygp
OworICAgIGlmIChkaWRVcGRhdGUpCisgICAgICAgIHVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9s
bGluZygpOwogI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tp
bmdDb250YWluZXJSZWN1cnNpdmVseShSZW5kZXJMYXllciogYW5jZXN0b3JTdGFja2luZ0NvbnRl
eHQpCit7CisgICAgaWYgKHRoaXMgIT0gYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpIHsKKyAgICAg
ICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcihhbmNlc3RvclN0YWNraW5nQ29udGV4dCk7
CiAgICAgfQorCisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjaGlsZC0+dXBkYXRl
Q2FuQmVTdGFja2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0
KTsKIH0KIAorCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21l
dHJ5TWFwKiBnZW9tZXRyeU1hcCkKIHsKICAgICBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0
dXNEaXJ0eSk7CkBAIC0xMDAxLDcgKzExMDksNyBAQCBib29sIFJlbmRlckxheWVyOjpjYW5CZVN0
YWNraW5nQ29udGFpbmVyKCkgY29uc3QKICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQoKSB8fCAh
c3RhY2tpbmdDb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4g
bV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXI7CisgICAgcmV0dXJuIG1f
Y2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWluZXI7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6
OnNldEhhc1Zpc2libGVDb250ZW50KCkKQEAgLTEzMTgsMTIgKzE0MjYsNiBAQCBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OnN0YWNraW5nQ29udGFpbmVyKCkgY29uc3QKICAgICByZXR1cm4gbGF5
ZXI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc2l0aW9uZWRDb250YWluZXIoUmVuZGVy
TGF5ZXIqIGxheWVyKQotewotICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGxheWVyUmVuZGVy
ZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLSAgICByZXR1cm4gbGF5ZXItPmlzUm9vdExheWVyKCkg
fHwgbGF5ZXJSZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5ZXItPmhhc1RyYW5zZm9ybSgp
OwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVu
ZGVyTGF5ZXIqIGxheWVyKQogewogICAgIHJldHVybiBsYXllci0+aXNSb290TGF5ZXIoKSB8fCBs
YXllci0+aGFzVHJhbnNmb3JtKCk7CkBAIC0xOTY3LDYgKzIwNjksMTkgQEAgYm9vbCBSZW5kZXJM
YXllcjo6bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKICAgICByZXR1cm4gbV9uZWVk
c0NvbXBvc2l0ZWRTY3JvbGxpbmc7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUlzTm9y
bWFsRmxvd09ubHkoKQoreworICAgIGJvb2wgaXNOb3JtYWxGbG93T25seSA9IHNob3VsZEJlTm9y
bWFsRmxvd09ubHkoKTsKKyAgICBpZiAoaXNOb3JtYWxGbG93T25seSAhPSBtX2lzTm9ybWFsRmxv
d09ubHkpIHsKKyAgICAgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gaXNOb3JtYWxGbG93T25seTsK
KyAgICAgICAgUmVuZGVyTGF5ZXIqIHAgPSBwYXJlbnQoKTsKKyAgICAgICAgaWYgKHApCisgICAg
ICAgICAgICBwLT5kaXJ0eU5vcm1hbEZsb3dMaXN0KCk7CisgICAgICAgIGRpcnR5U3RhY2tpbmdD
b250YWluZXJaT3JkZXJMaXN0cygpOworICAgIH0KK30KKworCiB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKQogewogICAgIGJvb2wgb2xkTmVlZHNDb21w
b3NpdGVkU2Nyb2xsaW5nID0gbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmc7CkBAIC0xOTg3LDYg
KzIxMDIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKQogICAgIH0KIAogICAgIGlmIChvbGROZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgIT0gbV9u
ZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHsKKyAgICAgICAgdXBkYXRlSXNOb3JtYWxGbG93T25s
eSgpOwogICAgICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogICAgICAgICBpZiAoaXNT
dGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0cygpOwpAQCAt
NTcwNCw3ICs1ODIwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhib29sIGlu
Y2x1ZGVIaWRkZW5MYXllcnMsIENvbGxlY3RMYXllcnNCZWhhdmlvcgogCiB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKQogewotICAgIGJvb2wgc2hvdWxkVXBkYXRl
RGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyID0gaXNTdGFja2luZ0NvbnRl
eHQoKSAmJiAobV96T3JkZXJMaXN0c0RpcnR5IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7Cisg
ICAgYm9vbCBzaG91bGRVcGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyID0gYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpICYmIGlzU3RhY2tpbmdDb250ZXh0
KCkgJiYgKG1fek9yZGVyTGlzdHNEaXJ0eSB8fCBtX25vcm1hbEZsb3dMaXN0RGlydHkpOwogICAg
IHVwZGF0ZVpPcmRlckxpc3RzKCk7CiAgICAgdXBkYXRlTm9ybWFsRmxvd0xpc3QoKTsKIApAQCAt
NTcxMyw4ICs1ODI5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyTGlzdHNJZk5l
ZWRlZCgpCiAgICAgICAgIHJlZmxlY3Rpb25MYXllci0+dXBkYXRlTm9ybWFsRmxvd0xpc3QoKTsK
ICAgICB9CiAKLSAgICBpZiAoc2hvdWxkVXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5T
dGFja2luZ09yZGVyKSB7Ci0gICAgICAgIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0lu
U3RhY2tpbmdPcmRlcigpOworICAgIGlmIChzaG91bGRVcGRhdGVDYW5CZVN0YWNraW5nQ29udGFp
bmVyKSB7CisgICAgICAgIC8vIGNhbGwgVXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lciBmb3Ig
YWxsIGRlc2NlbmRhbnRzLAorICAgICAgICAvLyBwYXNzaW5nIHNlbGYgaW4gYXMgYW5jZXN0b3Ig
c3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgdXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lclJl
Y3Vyc2l2ZWx5KHRoaXMpOworCiAgICAgICAgIC8vIFRoZSBhYm92ZSBmdW5jdGlvbiBjYW4gY2F1
c2UgdXMgdG8gdXBkYXRlIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAgIC8vIGFu
ZCBkaXJ0eSBvdXIgbGF5ZXIgbGlzdHMuIFJlZnJlc2ggdGhlbSBpZiBuZWNlc3NhcnkuCiAgICAg
ICAgIHVwZGF0ZVpPcmRlckxpc3RzKCk7CkBAIC01OTAxLDcgKzYwMjAsNyBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5k
ZXJTdHlsZSogb2xkUwogICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQgPSB0aGlzLT5pc1N0YWNr
aW5nQ29udGV4dCgpOwogICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCAhPSB3YXNTdGFja2luZ0Nv
bnRleHQpIHsKICAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3RzKCk7Ci0g
ICAgICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCkKKyAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250
ZXh0IHx8IGlzU3RhY2tpbmdDb250YWluZXIoKSkKICAgICAgICAgICAgIGRpcnR5Wk9yZGVyTGlz
dHMoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2xlYXJaT3JkZXJMaXN0cygpOwpAQCAt
NTkxMiw3ICs2MDMxLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU3RhY2tpbmdDb250ZXh0
c0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFMKICAgICAvLyBsaWtlbHkg
YmUgZm9sZGVkIGFsb25nIHdpdGggdGhlIHJlc3QuCiAgICAgaWYgKG9sZFN0eWxlLT56SW5kZXgo
KSAhPSByZW5kZXJlcigpLT5zdHlsZSgpLT56SW5kZXgoKSB8fCBvbGRTdHlsZS0+dmlzaWJpbGl0
eSgpICE9IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSkgewogICAgICAgICBkaXJ0
eVN0YWNraW5nQ29udGFpbmVyWk9yZGVyTGlzdHMoKTsKLSAgICAgICAgaWYgKGlzU3RhY2tpbmdD
b250ZXh0KQorICAgICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2luZ0NvbnRh
aW5lcigpKQogICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0cygpOwogICAgIH0KIH0KQEAgLTYw
MDEsMTQgKzYxMjAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVPdXRPZkZsb3dQb3NpdGlv
bmVkKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIAogdm9pZCBSZW5kZXJMYXllcjo6c3R5
bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQog
ewotICAgIGJvb2wgaXNOb3JtYWxGbG93T25seSA9IHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKTsK
LSAgICBpZiAoaXNOb3JtYWxGbG93T25seSAhPSBtX2lzTm9ybWFsRmxvd09ubHkpIHsKLSAgICAg
ICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gaXNOb3JtYWxGbG93T25seTsKLSAgICAgICAgUmVuZGVy
TGF5ZXIqIHAgPSBwYXJlbnQoKTsKLSAgICAgICAgaWYgKHApCi0gICAgICAgICAgICBwLT5kaXJ0
eU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAgICAgIGRpcnR5U3RhY2tpbmdDb250YWluZXJaT3JkZXJM
aXN0cygpOwotICAgIH0KKyAgICB1cGRhdGVJc05vcm1hbEZsb3dPbmx5KCk7CiAKICAgICBpZiAo
cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgcmVuZGVyZXIo
KS0+c3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTU5PTkUgJiYgcmVuZGVyZXIoKS0+aXNC
b3goKSkgewogICAgICAgICBpZiAoIW1fbWFycXVlZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKaW5kZXggMzlmMTBjMzA4YzY5N2QzM2MxMGQyMzZkMGU1ZDk3ZWZkODQ5NWQ5
Yi4uZjJmN2VkOWVjNTYyNjljNWRlYzc3ZTQzOWRlYzZkNjdmNGM5N2M0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTg1Myw4ICs4NTMsMTAgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dFN0YXR1cygpOwogCiAgICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dT
Y3JvbGxFbmFibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRp
Z3VvdXNJblN0YWNraW5nT3JkZXIoKTsKLSAgICB2b2lkIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29u
dGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShjb25zdCBIYXNoTWFwPGNvbnN0IFJlbmRl
ckxheWVyKiwgaW50PiYsIGludCYgbWluSW5kZXgsIGludCYgbWF4SW5kZXgsIGludCYgY291bnQs
IGJvb2wgZmlyc3RJdGVyYXRpb24pOworCisgICAgYm9vbCBpc1Byb21vdGVkTGF5ZXJMaXN0SW5D
b3JyZWN0U3RhY2tpbmdPcmRlcihjb25zdCBWZWN0b3I8Y29uc3QgUmVuZGVyTGF5ZXIqPiYsIGNv
bnN0IFZlY3Rvcjxjb25zdCBSZW5kZXJMYXllcio+JikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVD
YW5CZVN0YWNraW5nQ29udGFpbmVyKFJlbmRlckxheWVyKik7CisgICAgdm9pZCB1cGRhdGVDYW5C
ZVN0YWNraW5nQ29udGFpbmVyUmVjdXJzaXZlbHkoUmVuZGVyTGF5ZXIqKTsKIAogICAgIHZvaWQg
Y29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCogPSAwKTsKICAgICB2b2lkIGNvbXB1
dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwpAQCAtODc2LDYgKzg3OCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNPdXRPZkZsb3dQb3NpdGlv
bmVkRGVzY2VuZGFudFN0YXR1cygpOwogICAgIHZvaWQgdXBkYXRlT3V0T2ZGbG93UG9zaXRpb25l
ZChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCisgICAgdm9pZCB1cGRhdGVJc05vcm1h
bEZsb3dPbmx5KCk7CiAgICAgdm9pZCB1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY2hhbmdlZC4KQEAgLTExNTUs
NyArMTE1OCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBJZiB0aGlzIGlzIHRydWUsIHRoZW4gbm8g
bm9uLWRlc2NlbmRhbnQgYXBwZWFycyBiZXR3ZWVuIGFueSBvZiBvdXIKICAgICAvLyBkZXNjZW5k
YW50cyBpbiBzdGFja2luZyBvcmRlci4gVGhpcyBpcyBvbmUgb2YgdGhlIHJlcXVpcmVtZW50cyBv
ZiBiZWluZwogICAgIC8vIGFibGUgdG8gc2FmZWx5IGJlY29tZSBhIHN0YWNraW5nIGNvbnRleHQu
Ci0gICAgYm9vbCBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlciA6IDE7
CisgICAgYm9vbCBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVyIDogMTsKIAogICAg
IGNvbnN0IGJvb2wgbV9pc1Jvb3RMYXllciA6IDE7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4NDg4NjgwZTQzN2QzZWVl
MmQ2NmU5NDRiNzk4MDE1OWM2NjA1YjNlLi40MTM1YzVhOWExMDBiYzI4NGJmMzI5NTE4NmI4NjI0
N2FlYTk1ZTdjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTMtMDMtMDQgIEdsZW5uIEhhcnRt
YW5uICA8aGFydG1hbm5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBTaW1wbGlmeSBsb2dpYyBm
b3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkIHNjcm9sbGluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MzAyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugc2ltcGxpZnkgdGhl
IGxvZ2ljIGZvciBhdXRvbWF0aWNhbGx5IG9wdGluZyBpbnRvIGNvbXBvc2l0ZWQKKyAgICAgICAg
c2Nyb2xsaW5nIGJ5IGdlbmVyYXRpbmcgdHdvIHNldHMgb2Ygei1vcmRlciBsaXN0cywgZmlyc3Qg
Zm9yY2luZyBhCisgICAgICAgIGxheWVyIHRvIG5vdCBwcm9tb3RlLCB0aGVuIGZvcmNpbmcgaXQg
dG8gcHJvbW90ZSB0aGUgc2Vjb25kIHRpbWUuIFRoZQorICAgICAgICB0d28gc2V0cyBvZiBsaXN0
cyBjYW4gYmUgcmVsYXRpdmVseSBlYXNpbHkgY29tcGFyZWQgZm9yIGFueSBwb3NzaWJsZQorICAg
ICAgICBjaGFuZ2UgaW4gc3RhY2tpbmcgb3JkZXIuIElmIHRoZSB0d28gbGlzdHMgYXJlIGluIGZh
Y3QgdGhlIHNhbWUsIHRoZW4KKyAgICAgICAgd2Uga25vdyBpdCBpcyBzYWZlIHRvIHByb21vdGUg
dGhlIGxheWVyIHRvIGJlIGEgc3RhY2tpbmcgY29udGFpbmVyLiBUaGlzCisgICAgICAgIHNob3Vs
ZCBiZSBtb3JlIGludHVpdGl2ZSBhbmQgbW9yZSByb2J1c3QgdGhhbiB0aGUgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKworICAgICAgICAqIGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2Fs
bHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1z
Y3JvbGxpbmcuaHRtbDoKKyAgICAgICAgKiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1j
b21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1z
Y3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEzLTAzLTAxICBUYWthc2hpIFRv
eW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGNo
cm9taXVtIGdhcmRlbmluZywgdXBkYXRlIGltYWdlIGV4cGVjdGF0aW9uIGFnYWluCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1p
bnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBv
c2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxp
bmctZXhwZWN0ZWQudHh0CmluZGV4IGRlZWY1MTUwMmI3OWRkMDRkYTQ3OGQ1MWVmMDI0OTcxOGE2
NDkyNzguLjhiMTM3ODkxNzkxZmU5NjkyN2FkNzhlNjRiMGFhZDdiZGVkMDhiZGMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWlu
dG8tY29tcG9zaXRlZC1zY3JvbGxpbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3Jv
bGxpbmctZXhwZWN0ZWQudHh0CkBAIC0xLDEyNyArMSBAQAotSXRlcmF0aW9uIDA6IFBhc3NlZAot
SXRlcmF0aW9uIDAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxOiBQYXNzZWQKLUl0ZXJhdGlvbiAx
LCBsYXllciB0cmVlCi1JdGVyYXRpb24gMjogUGFzc2VkCi1JdGVyYXRpb24gMiwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDM6IFBhc3NlZAotSXRlcmF0aW9uIDMsIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biA0OiBQYXNzZWQKLUl0ZXJhdGlvbiA0LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTogUGFzc2Vk
Ci1JdGVyYXRpb24gNSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDY6IFBhc3NlZAotSXRlcmF0aW9u
IDYsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA3OiBQYXNzZWQKLUl0ZXJhdGlvbiA3LCBsYXllciB0
cmVlCi1JdGVyYXRpb24gODogUGFzc2VkCi1JdGVyYXRpb24gOCwgbm8gbGF5ZXIgdHJlZQotSXRl
cmF0aW9uIDk6IFBhc3NlZAotSXRlcmF0aW9uIDksIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAx
MDogUGFzc2VkCi1JdGVyYXRpb24gMTAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxMTogUGFzc2Vk
Ci1JdGVyYXRpb24gMTEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxMjogUGFzc2VkCi1JdGVyYXRp
b24gMTIsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxMzogUGFzc2VkCi1JdGVyYXRpb24gMTMs
IG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxNDogUGFzc2VkCi1JdGVyYXRpb24gMTQsIG5vIGxh
eWVyIHRyZWUKLUl0ZXJhdGlvbiAxNTogUGFzc2VkCi1JdGVyYXRpb24gMTUsIG5vIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiAxNjogUGFzc2VkCi1JdGVyYXRpb24gMTYsIG5vIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiAxNzogUGFzc2VkCi1JdGVyYXRpb24gMTcsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biAxODogUGFzc2VkCi1JdGVyYXRpb24gMTgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxOTog
UGFzc2VkCi1JdGVyYXRpb24gMTksIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyMDogUGFzc2Vk
Ci1JdGVyYXRpb24gMjAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyMTogUGFzc2VkCi1JdGVyYXRp
b24gMjEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyMjogUGFzc2VkCi1JdGVyYXRpb24gMjIsIGxh
eWVyIHRyZWUKLUl0ZXJhdGlvbiAyMzogUGFzc2VkCi1JdGVyYXRpb24gMjMsIGxheWVyIHRyZWUK
LUl0ZXJhdGlvbiAyNDogUGFzc2VkCi1JdGVyYXRpb24gMjQsIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biAyNTogUGFzc2VkCi1JdGVyYXRpb24gMjUsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyNjogUGFz
c2VkCi1JdGVyYXRpb24gMjYsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyNzogUGFzc2VkCi1JdGVy
YXRpb24gMjcsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyODogUGFzc2VkCi1JdGVyYXRpb24gMjgs
IGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyOTogUGFzc2VkCi1JdGVyYXRpb24gMjksIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiAzMDogUGFzc2VkCi1JdGVyYXRpb24gMzAsIGxheWVyIHRyZWUKLUl0ZXJh
dGlvbiAzMTogUGFzc2VkCi1JdGVyYXRpb24gMzEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzMjog
UGFzc2VkCi1JdGVyYXRpb24gMzIsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzMzogUGFzc2VkCi1J
dGVyYXRpb24gMzMsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzNDogUGFzc2VkCi1JdGVyYXRpb24g
MzQsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzNTogUGFzc2VkCi1JdGVyYXRpb24gMzUsIG5v
IGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzNjogUGFzc2VkCi1JdGVyYXRpb24gMzYsIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiAzNzogUGFzc2VkCi1JdGVyYXRpb24gMzcsIGxheWVyIHRyZWUKLUl0ZXJh
dGlvbiAzODogUGFzc2VkCi1JdGVyYXRpb24gMzgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAz
OTogUGFzc2VkCi1JdGVyYXRpb24gMzksIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0MDogUGFz
c2VkCi1JdGVyYXRpb24gNDAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0MTogUGFzc2VkCi1JdGVy
YXRpb24gNDEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0MjogUGFzc2VkCi1JdGVyYXRpb24gNDIs
IGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0MzogUGFzc2VkCi1JdGVyYXRpb24gNDMsIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiA0NDogUGFzc2VkCi1JdGVyYXRpb24gNDQsIGxheWVyIHRyZWUKLUl0ZXJh
dGlvbiA0NTogUGFzc2VkCi1JdGVyYXRpb24gNDUsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0Njog
UGFzc2VkCi1JdGVyYXRpb24gNDYsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0NzogUGFzc2VkCi1J
dGVyYXRpb24gNDcsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0ODogUGFzc2VkCi1JdGVyYXRpb24g
NDgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0OTogUGFzc2VkCi1JdGVyYXRpb24gNDksIG5v
IGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1MDogUGFzc2VkCi1JdGVyYXRpb24gNTAsIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiA1MTogUGFzc2VkCi1JdGVyYXRpb24gNTEsIGxheWVyIHRyZWUKLUl0ZXJh
dGlvbiA1MjogUGFzc2VkCi1JdGVyYXRpb24gNTIsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1Mzog
UGFzc2VkCi1JdGVyYXRpb24gNTMsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1NDogUGFzc2VkCi1J
dGVyYXRpb24gNTQsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1NTogUGFzc2VkCi1JdGVyYXRp
b24gNTUsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1NjogUGFzc2VkCi1JdGVyYXRpb24gNTYs
IG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1NzogUGFzc2VkCi1JdGVyYXRpb24gNTcsIG5vIGxh
eWVyIHRyZWUKLUl0ZXJhdGlvbiA1ODogUGFzc2VkCi1JdGVyYXRpb24gNTgsIG5vIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiA1OTogUGFzc2VkCi1JdGVyYXRpb24gNTksIG5vIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiA2MDogUGFzc2VkCi1JdGVyYXRpb24gNjAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA2
MTogUGFzc2VkCi1JdGVyYXRpb24gNjEsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA2MjogUGFz
c2VkCi1JdGVyYXRpb24gNjIsIGxheWVyIHRyZWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNj
cm9sbGluZy5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGlj
YWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy5odG1sCmluZGV4IDFlNjdiNWRkNzhm
YjcxMWJiZTE0YzE2NjE4ODMyZTYxMWRhZmFmNDAuLmMwMjI2YjgwODdkYjc5YmZlMTUyNDcxNDg4
ZTA5ZGY0N2U5MTVhZjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJm
bG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRv
LWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLmh0bWwKQEAgLTEyLDEyICsxMiwxNCBAQAogICAgICAgb3Zl
cmZsb3c6IHNjcm9sbDsKICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgIGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwRkZGRjsKICAgICB9CiAKICAg
ICAuc2Nyb2xsZWQgewogICAgICAgd2lkdGg6IDE4MHB4OwotICAgICAgaGVpZ2h0OiA5MHB4Owor
ICAgICAgaGVpZ2h0OiAzMHB4OwogICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgdG9wOiA3MHB4
OwogICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsKICAgICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKICAgICB9CkBAIC0yNSwyNSArMjcsMzIgQEAKICAgICAucG9zaXRpb25lZCB7CiAgICAgICB3
aWR0aDogMTIwcHg7CiAgICAgICBoZWlnaHQ6IDI0MHB4OwotICAgICAgYmFja2dyb3VuZC1jb2xv
cjogZ3JlZW47CiAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgfQogCisgICAgI3NlY29u
ZENoaWxkIHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQzk5OTk7CisgICAgICB0b3A6IDUw
cHg7CisgICAgfQorCiAgICAgI3ByZWRlY2Vzc29yIHsKICAgICAgIGxlZnQ6IDIwcHg7CiAgICAg
ICB0b3A6IDIwcHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTkwMDY2OwogICAgIH0KIAog
ICAgICNzdWNjZXNzb3IgewotICAgICAgbGVmdDogMTYwcHg7CisgICAgICBsZWZ0OiAyMHB4Owog
ICAgICAgdG9wOiAyMHB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDA2NjsKICAgICB9
CiAKLSAgICAjZGVzY2VuZGFudCB7Ci0gICAgICBsZWZ0OiA5MHB4OwotICAgICAgdG9wOiAyMHB4
OwotICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKLSAgICAgIHotaW5kZXg6IC0yMDsKKyAg
ICAjbm9ybWFsRmxvdyB7CisgICAgICB3aWR0aDogMTgwcHg7CisgICAgICBoZWlnaHQ6IDMwcHg7
CisgICAgICBtYXJnaW46IDEwcHg7CisgICAgICB0b3A6IC0yMHB4OworICAgICAgYmFja2dyb3Vu
ZC1jb2xvcjogeWVsbG93OwogICAgIH0KICAgPC9zdHlsZT4KICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KQEAgLTUyLDkgKzYxLDYgQEAKICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCiAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKIAotICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKQotICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5z
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKHRydWUpOwot
CiAgICAgZnVuY3Rpb24gd3JpdGUoc3RyKQogICAgIHsKICAgICAgIHZhciBwcmUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOwpAQCAtNjIsMTY5ICs2OCwxOTUgQEAKICAgICAg
IHByZS5hcHBlbmRDaGlsZCh0ZXh0KTsKICAgICB9CiAKLSAgICB2YXIgaXRlcmF0aW9uID0gMDsK
LSAgICBmdW5jdGlvbiBwcmludFJlc3VsdChleHBlY3RlZFJlc3VsdCkKKyAgICBmdW5jdGlvbiBk
aWRPcHRJbigpCisgICAgeworICAgICAgLy8gRm9yY2UgYSBzdHlsZSByZWNhbGMuCisgICAgICBk
b2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKKworICAgICAgLy8gRm9yY2UgYSBsYXlvdXQuCisgICAg
ICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisgICAgICB2YXIgbGF5
ZXJUcmVlID0gd2luZG93LmludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQpOworCisg
ICAgICBpZiAoZGVidWdNb2RlKQorICAgICAgICAgIHdyaXRlKGxheWVyVHJlZSk7CisKKyAgICAg
IHJldHVybiAhIWxheWVyVHJlZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRTdGFja2luZ09y
ZGVyKCkKICAgICB7CisgICAgICB2YXIgZGl2RWxlbWVudHMgPSBbXTsKICAgICAgIC8vIEZvcmNl
IGEgc3R5bGUgcmVjYWxjLgogICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CiAKLSAgICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgotICAg
ICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7Ci0gICAgICAgIHZh
ciBsYXllclRyZWUgPSB3aW5kb3cuaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCk7
Ci0KLSAgICAgICAgaWYgKCFsYXllclRyZWUgPT0gIWV4cGVjdGVkUmVzdWx0KQotICAgICAgICAg
IHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmluZygpICsgJzogUGFzc2VkJykK
LSAgICAgICAgZWxzZQotICAgICAgICAgIHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50
b1N0cmluZygpICsgJzogRkFJTEVEJykKLQotICAgICAgICBpZiAobGF5ZXJUcmVlKSB7Ci0gICAg
ICAgICAgd3JpdGUoJ0l0ZXJhdGlvbiAnICsgaXRlcmF0aW9uLnRvU3RyaW5nKCkgKyAnLCBsYXll
ciB0cmVlJyk7Ci0gICAgICAgICAgaWYgKGRlYnVnTW9kZSkKLSAgICAgICAgICAgICAgd3JpdGUo
bGF5ZXJUcmVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgd3JpdGUoJ0l0ZXJhdGlvbiAn
ICsgaXRlcmF0aW9uLnRvU3RyaW5nKCkgKyAnLCBubyBsYXllciB0cmVlJyk7CisgICAgICAvLyBG
b3JjZSBhIGxheW91dC4KKyAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdCb3goY29udGFp
bmVyKTsKKworICAgICAgdmFyIGVycm9yQ29kZSA9IDA7CisgICAgICB2YXIgc3RhY2tpbmdPcmRl
ciA9IHdpbmRvdy5pbnRlcm5hbHMubm9kZXNGcm9tUmVjdChkb2N1bWVudCwgMTAwLCA3NSwgMjAw
LCAyMDAsIDIwMCwgMjAwLCBmYWxzZSwgZmFsc2UsIGVycm9yQ29kZSk7CisKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc3RhY2tpbmdPcmRlci5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAo
c3RhY2tpbmdPcmRlcltpXS5ub2RlTmFtZSA9PT0gIkRJViIpIHsKKyAgICAgICAgICBkaXZFbGVt
ZW50cy5wdXNoKHN0YWNraW5nT3JkZXJbaV0pOworICAgICAgICB9CiAgICAgICB9Ci0gICAgICBp
dGVyYXRpb24rKzsKKworICAgICAgcmV0dXJuIGRpdkVsZW1lbnRzOwogICAgIH0KIAogICAgIGZ1
bmN0aW9uIGRvVGVzdCgpCiAgICAgeworICAgICAgdmFyIGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2FuY2VzdG9yJyk7CiAgICAgICB2YXIgcHJlZGVjZXNzb3IgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgncHJlZGVjZXNzb3InKTsKICAgICAgIHZhciBzdWNjZXNzb3IgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VjY2Vzc29yJyk7CiAgICAgICB2YXIgY29udGFpbmVy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOwogICAgICAgdmFyIGZpcnN0
Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3RDaGlsZCcpOwogICAgICAgdmFy
IHNlY29uZENoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29uZENoaWxkJyk7Ci0g
ICAgICB2YXIgZGVzY2VuZGFudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXNjZW5kYW50
Jyk7CiAgICAgICB2YXIgY291bnQgPSAwOwogCi0gICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3Bs
YXkgPSAnbm9uZSc7Ci0KLSAgICAgIC8vIGRlc2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLgot
ICAgICAgZm9yIChpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwg
NTsgKytqKSB7Ci0gICAgICAgICAgZm9yIChrID0gMDsgayA8IDI7ICsraykgewotICAgICAgICAg
ICAgZm9yIChsID0gMDsgbCA8IDI7ICsrbCkgewotICAgICAgICAgICAgICB2YXIgbWluWkluZGV4
ID0gMDsKLSAgICAgICAgICAgICAgdmFyIG1heFpJbmRleCA9IDA7Ci0gICAgICAgICAgICAgIGlm
IChpID09IDApIHsKLSAgICAgICAgICAgICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICcx
JzsKLSAgICAgICAgICAgICAgICBzZWNvbmRDaGlsZC5zdHlsZS56SW5kZXggPSAnMyc7Ci0gICAg
ICAgICAgICAgICAgbWF4WkluZGV4ID0gMzsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09
IDEpIHsKLSAgICAgICAgICAgICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICctMSc7Ci0g
ICAgICAgICAgICAgICAgc2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4ID0gJy0zJzsKLSAgICAgICAg
ICAgICAgICBtaW5aSW5kZXggPSAtMzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICctMSc7Ci0gICAgICAgICAgICAgICAg
c2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4ID0gJzMnOwotICAgICAgICAgICAgICAgIG1pblpJbmRl
eCA9IC0xOwotICAgICAgICAgICAgICAgIG1heFpJbmRleCA9IDM7Ci0gICAgICAgICAgICAgIH0K
KyAgICAgIGZvciAodmFyIHNpYmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVyID0g
MDsgc2libGluZ1Nob3VsZEJlWmVyb0lmUHJlY2VkZXNDb250YWluZXIgPD0gMTsgKytzaWJsaW5n
U2hvdWxkQmVaZXJvSWZQcmVjZWRlc0NvbnRhaW5lcikgeworICAgICAgICBmb3IgKHZhciBjb250
YWluZXJJc1Bvc2l0aW9uZWQgPSAwOyBjb250YWluZXJJc1Bvc2l0aW9uZWQgPD0gMTsgKytjb250
YWluZXJJc1Bvc2l0aW9uZWQpIHsKKyAgICAgICAgICBmb3IgKHZhciBzaWJsaW5nSXNTdWNjZXNz
b3IgPSAwOyBzaWJsaW5nSXNTdWNjZXNzb3IgPD0gMTsgKytzaWJsaW5nSXNTdWNjZXNzb3IpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9IDA7IGhhc1Bvc2l0
aW9uZWRBbmNlc3RvciA8PSAxOyArK2hhc1Bvc2l0aW9uZWRBbmNlc3RvcikgeworICAgICAgICAg
ICAgICB2YXIgaW5kaWNlcyA9IFsgMCwgMSwgMiwgMyBdOworICAgICAgICAgICAgICBmb3IgKHZh
ciBzaWJsaW5nSW5kZXggPSAwOyBzaWJsaW5nSW5kZXggPCA0OyArK3NpYmxpbmdJbmRleCkgewor
ICAgICAgICAgICAgICAgIHZhciBzaWJsaW5nSW5kaWNlcyA9IGluZGljZXMuc2xpY2UoMCk7Cisg
ICAgICAgICAgICAgICAgc2libGluZ0luZGljZXMuc3BsaWNlKHNpYmxpbmdJbmRleCwgMSk7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIgY29udGFpbmVyU3ViaW5kZXggPSAwOyBjb250YWluZXJT
dWJpbmRleCA8IDM7ICsrY29udGFpbmVyU3ViaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHZh
ciBjb250YWluZXJJbmRpY2VzID0gc2libGluZ0luZGljZXMuc2xpY2UoMCk7CisgICAgICAgICAg
ICAgICAgICB2YXIgY29udGFpbmVySW5kZXggPSBjb250YWluZXJJbmRpY2VzW2NvbnRhaW5lclN1
YmluZGV4XTsKKyAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluZGljZXMuc3BsaWNlKGNvbnRh
aW5lclN1YmluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgIHZhciBmaXJzdENoaWxkSW5kZXgg
PSBjb250YWluZXJJbmRpY2VzWzBdOworICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZENoaWxk
SW5kZXggPSBjb250YWluZXJJbmRpY2VzWzFdOwogCi0gICAgICAgICAgICAgIHZhciBzaWJsaW5n
ID0gcHJlZGVjZXNzb3I7Ci0gICAgICAgICAgICAgIHZhciB0b0hpZGUgPSBzdWNjZXNzb3I7Ci0g
ICAgICAgICAgICAgIGlmIChrID09IDEpIHsKLSAgICAgICAgICAgICAgICBzaWJsaW5nID0gc3Vj
Y2Vzc29yOwotICAgICAgICAgICAgICAgIHRvSGlkZSA9IHByZWRlY2Vzc29yOwotICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICB2YXIgc2libGluZ1ByZWNlZGVzQ29udGFpbmVyID0g
c2libGluZ0luZGV4ID09IGNvbnRhaW5lckluZGV4IC0gMTsKKyAgICAgICAgICAgICAgICAgIGlm
IChmaXJzdENoaWxkSW5kZXggPiBzZWNvbmRDaGlsZEluZGV4KQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25l
ZCA9PSAxICYmIGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmdTaG91bGRCZVplcm9J
ZlByZWNlZGVzQ29udGFpbmVyID09IDEgJiYgIXNpYmxpbmdQcmVjZWRlc0NvbnRhaW5lcikKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgIHZhciBvcmRl
cmluZyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCBdOworICAgICAgICAgICAgICAgICAgb3Jk
ZXJpbmdbc2libGluZ0luZGV4XSA9IHNpYmxpbmdJc1N1Y2Nlc3NvciA9PSAxID8gc3VjY2Vzc29y
IDogcHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tjb250YWluZXJJbmRl
eF0gPSBoYXNQb3NpdGlvbmVkQW5jZXN0b3IgPT0gMSA/IGFuY2VzdG9yIDogY29udGFpbmVyOwor
ICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbZmlyc3RDaGlsZEluZGV4XSA9IGZpcnN0Q2hpbGQ7
CisgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tzZWNvbmRDaGlsZEluZGV4XSA9IHNlY29uZENo
aWxkOworCisgICAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IHByZWRlY2Vzc29yOworICAg
ICAgICAgICAgICAgICAgdmFyIHRvSGlkZSA9IHN1Y2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAg
IGlmIChzaWJsaW5nSXNTdWNjZXNzb3IgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBzaWJs
aW5nID0gc3VjY2Vzc29yOworICAgICAgICAgICAgICAgICAgICB0b0hpZGUgPSBwcmVkZWNlc3Nv
cjsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgdG9IaWRlLnN0eWxl
LmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLmRpc3Bs
YXkgPSAnJzsKKworICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uZWQgPSBudWxsOworICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAg
ICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSBjb250YWluZXI7CisgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0g
Jyc7CiAKLSAgICAgICAgICAgICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUgaWYg
dGhlIHRoZSBlbGVtZW50IHRvIGhpZGUgaXMKLSAgICAgICAgICAgICAgLy8gZGlzcGxheTpoaWRk
ZW4gb3IgZGlzcGxheTpub25lLgotICAgICAgICAgICAgICBpZiAobCA9PSAwKQotICAgICAgICAg
ICAgICAgIHRvSGlkZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgdG9IaWRlLnN0eWxlLmRpc3BsYXkgPSAnaGlkZGVuJzsKLQotICAg
ICAgICAgICAgICBzaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnJzsKLQotICAgICAgICAgICAgICBp
ZiAoaiA9PSAwKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gKG1heFpJ
bmRleCArIDEpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGogPT0gMSkKLSAg
ICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IChtaW5aSW5kZXggLSAxKS50b1N0
cmluZygpOwotICAgICAgICAgICAgICBlbHNlIGlmIChqID09IDIpCi0gICAgICAgICAgICAgICAg
c2libGluZy5zdHlsZS56SW5kZXggPSBtYXhaSW5kZXgudG9TdHJpbmcoKTsKLSAgICAgICAgICAg
ICAgZWxzZSBpZiAoaiA9PSAzKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4
ID0gbWluWkluZGV4LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9ICgobWluWkluZGV4ICsgbWF4WkluZGV4KSAvIDIp
LnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgICAgICAgdmFyIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgaWYgKHNpYmxpbmcuc3R5bGUuekluZGV4ID4gbWF4WkluZGV4IHx8Ci0g
ICAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA8IG1pblpJbmRleCkgewotICAg
ICAgICAgICAgICAgICAgLy8gc2libGluZyBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBvdXIgZGVz
Y2VuZGFudHMuCi0gICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA8IG1heFpJbmRleCAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID4gbWluWkluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIGlzIGJldHdlZW4gb3VyIGRlc2NlbmRh
bnRzLgotICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IGZhbHNlOwotICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNpYmxpbmcuc3R5bGUuekluZGV4ID09IG1pblpJbmRleCkgewotICAg
ICAgICAgICAgICAgICAgaWYgKG1pblpJbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgLy8gc2libGluZyBsaWVzIGJldHdlZW4gdXMgKG5vcm1hbCBmbG93KSBhbmQgb3VyIHBvcwot
ICAgICAgICAgICAgICAgICAgICAgIC8vIHotb3JkZXIgZGVzY2VuZGFudHMsIHNvIHdlIGFyZSBu
b3QgY29udGlndW91cy4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIC8v
IHNpYmxpbmcncyB6SW5kZXggbWF0Y2hlcyB0aGUgbWluOyB3ZSdyZSBvbmx5IG9rIGlmIGl0Ci0g
ICAgICAgICAgICAgICAgICAgICAgLy8gYXBwZWFycyBmaXJzdC4KLSAgICAgICAgICAgICAgICAg
ICAgICBhcmVDb250aWd1b3VzID0gayA9PSAwOworICAgICAgICAgICAgICAgICAgaWYgKGhhc1Bv
c2l0aW9uZWRBbmNlc3RvciA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLnN0
eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25l
ZCA9IGFuY2VzdG9yOworICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFuY2VzdG9yLnN0eWxlLnBvc2l0aW9uID0gJyc7CisKKyAgICAgICAgICAgICAgICAgIC8v
IEFzc2lnbiB6LWluZGljZXMuCisgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySXNQb3Np
dGlvbmVkID09IDEgfHwgaGFzUG9zaXRpb25lZEFuY2VzdG9yID09IDEpCisgICAgICAgICAgICAg
ICAgICAgIG9yZGVyaW5nW2NvbnRhaW5lckluZGV4XS5zdHlsZS56SW5kZXggPSAnMCc7CisgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxl
LnpJbmRleCA9ICcnOworICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS56SW5kZXgg
PSAnJzsKICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWJs
aW5nLnN0eWxlLnpJbmRleCA9PSBtYXhaSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIGlmICht
YXhaSW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBsaWVzIGJl
dHdlZW4gdXMgKG5vcm1hbCBmbG93KSBhbmQgbmVnIHotb3JkZXIKLSAgICAgICAgICAgICAgICAg
ICAgICAvLyBkZXNjZW5kYW50cywgc28gd2UgYXJlIG5vdCBjb250aWd1b3VzLgotICAgICAgICAg
ICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobWF4WkluZGV4ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJs
aW5nIGlzIGluIHRoZSBwb3Mgei1vcmRlciBsaXN0IGFuZCBkb2VzIG5vdCBhZmZlY3QKLSAgICAg
ICAgICAgICAgICAgICAgICAvLyB1cyBzaW5jZSB3ZSdyZSBpbiB0aGUgbm9ybWFsIGZsb3cgbGlz
dCBhbmQgb3VyCi0gICAgICAgICAgICAgICAgICAgICAgLy8gZGVzY2FuZGFudHMgYXJlIGluIHRo
ZSBuZWcgei1vcmRlciBsaXN0LgotICAgICAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAvLyBzaWJsaW5nJ3MgekluZGV4IG1hdGNoZXMgdGhlIG1heDsgd2UncmUgb25seSBvayBpZiBp
dAotICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcGVhcnMgYWZ0ZXIuCi0gICAgICAgICAgICAg
ICAgICAgICAgYXJlQ29udGlndW91cyA9IGsgPT0gMTsKKworICAgICAgICAgICAgICAgICAgdmFy
IGN1cnJlbnRaSW5kZXggPSBzaWJsaW5nUHJlY2VkZXNDb250YWluZXIgJiYgc2libGluZ1Nob3Vs
ZEJlWmVyb0lmUHJlY2VkZXNDb250YWluZXIgPT0gMSA/IDAgOiAtMTsKKyAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGN1cnJlbnRJbmRleCA9IGNvbnRhaW5lckluZGV4IC0gMTsgY3VycmVudElu
ZGV4ID49IDA7IC0tY3VycmVudEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIG9yZGVyaW5n
W2N1cnJlbnRJbmRleF0uc3R5bGUuekluZGV4ID0gY3VycmVudFpJbmRleC50b1N0cmluZygpOwor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50WkluZGV4LS07CiAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICBwcmludFJlc3VsdChhcmVDb250aWd1
b3VzKTsKLSAgICAgICAgICAgIH0gLy8gZm9yIGwKLSAgICAgICAgICB9IC8vIGZvciBrCi0gICAg
ICAgIH0gLy8gZm9yIGoKLSAgICAgIH0gLy8gZm9yIGkKLQotICAgICAgLy8gTm93IGNoZWNrIHRo
YXQgd2UgZG9uJ3QgcHJvbW90ZSBpZiB3ZSBoYXZlIGFuIG91dCBvZiBmbG93IGRlc2NlbmRhbnQu
Ci0gICAgICAvLyBXZSBuZWVkIHRvIGhpZGUgdGhlIHByZWRlY2Vzc29yIGFuZCBzdWNjZXNzb3Ig
c28gdGhleSBkb24ndCBpbnRlcmZlcmUKLSAgICAgIC8vIHdpdGggdGhpcyBleHBlcmltZW50Lgot
ICAgICAgcHJlZGVjZXNzb3Iuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgIHN1Y2Nlc3Nv
ci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgZm9yIChpID0gMDsgaSA8IDM7ICsraSkg
ewotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgIGRlc2NlbmRhbnQuc3R5bGUuZGlzcGxh
eSA9ICdoaWRkZW4nOwotICAgICAgICBlbHNlIGlmIChpID09IDEpCi0gICAgICAgICAgZGVzY2Vu
ZGFudC5zdHlsZS5kaXNwbGF5ID0gJyc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkZXNjZW5k
YW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG91dCBvZiBm
bG93IHBvc2l0aW9uZWQgZGVzY2VuZGFudCBpcyB2aXNpYmxlLCB3ZSBjYW5ub3Qgb3B0Ci0gICAg
ICAgIC8vIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcuCi0gICAgICAgIHByaW50UmVzdWx0KGkg
IT0gMSk7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgICB9IC8vIGZvciBpCisgICAgICAgICAgICAg
ICAgICBjdXJyZW50WkluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1cnJl
bnRJbmRleCA9IGNvbnRhaW5lckluZGV4ICsgMTsgY3VycmVudEluZGV4IDwgNDsgKytjdXJyZW50
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbY3VycmVudEluZGV4XS5zdHls
ZS56SW5kZXggPSBjdXJyZW50WkluZGV4LnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRaSW5kZXgrKzsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVsb3cs
IHdoZW4gd2Ugc2V0IHdlYmtpdFRyYW5zZm9ybSB0byAnJywgd2Ugd2FudCB0aGF0IHRvIGZvcmNl
IGEgc3R5bGUgcmVjYWxjdWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gTWFraW5nIHRo
aXMgbm90ICcnIGhlcmUgd2lsbCBmb3JjZSB0aGlzIHJlY2FsY3VsYXRpb24uCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWigw
cHgpJzsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gZm9yY2UgdG8gbm90IHByb21vdGUuCisgICAgICAgICAgICAg
ICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnJzsKKworICAgICAgICAgICAgICAgICAg
ICB2YXIgb2xkU3RhY2tpbmdPcmRlciA9IGdldFN0YWNraW5nT3JkZXIoKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBmb3JjZSB0byBwcm9tb3RlLgorICAgICAgICAgICAgICAgICAgICB3aW5k
b3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxv
d1Njcm9sbEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHls
ZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWigwcHgpJzsKKworICAgICAgICAgICAgICAg
ICAgICB2YXIgbmV3U3RhY2tpbmdPcmRlciA9IGdldFN0YWNraW5nT3JkZXIoKTsKIAorICAgICAg
ICAgICAgICAgICAgICB2YXIgc2hvdWxkT3B0SW4gPSBvbGRTdGFja2luZ09yZGVyLmxlbmd0aCA9
PSBuZXdTdGFja2luZ09yZGVyLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBvbGRTdGFja2luZ09yZGVyLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9sZFN0YWNraW5nT3JkZXJbaV0gIT0gbmV3U3RhY2tpbmdPcmRlcltpXSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkT3B0SW4gPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJr
aXRUcmFuc2Zvcm0gPSAnJzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE9wdEluICE9
IGRpZE9wdEluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkT3B0SW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCJGQUlMIC0gc2hvdWxkJ3ZlIGF1dG9tYXRp
Y2FsbHkgb3B0ZWQgaW4gYnV0IGRpZG4ndCAiICsgY291bnQpOworICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnRkFJTCAtIGF1dG9t
YXRpY2FsbHkgb3B0ZWQgaW4gYW5kIGNoYW5nZWQgc3RhY2tpbmcgb3JkZXIgJyArIGNvdW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KICAgICB9IC8vIGZ1bmN0aW9uIGRvVGVzdAogCisgICAgZnVuY3Rpb24gdG9n
Z2xlKCkgeworICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b250YWluZXInKTsKKyAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBjb250
YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID8gJycgOiAndHJhbnNsYXRlWigwcHgpJzsKKwor
ICAgICAgLy8gRm9yY2UgYSBzdHlsZSByZWNhbGMuCisgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNl
dFRvcDsKKworICAgICAgLy8gRm9yY2UgYSBsYXlvdXQuCisgICAgICB3aW5kb3cuaW50ZXJuYWxz
LmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisgICAgfQorCiAgICAgd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CiAKIDxi
b2R5PgotICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0icHJlZGVjZXNzb3IiPjwvZGl2Pgot
ICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIGlkPSJjb250YWluZXIiPgotICAgIDxkaXYgY2xhc3M9
InNjcm9sbGVkIiBpZD0iZmlyc3RDaGlsZCI+PC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0ic2Nyb2xs
ZWQiIGlkPSJzZWNvbmRDaGlsZCI+PC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIg
aWQ9ImRlc2NlbmRhbnQiPjwvZGl2PgorICA8ZGl2IGlkPSJhbmNlc3RvciI+CisgICAgPGRpdiBj
bGFzcz0icG9zaXRpb25lZCIgaWQ9InByZWRlY2Vzc29yIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNz
PSJjb250YWluZXIiIGlkPSJjb250YWluZXIiPgorICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQi
IGlkPSJmaXJzdENoaWxkIj48L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0i
c2Vjb25kQ2hpbGQiPjwvZGl2PgorICAgICAgPGRpdiBpZD0ibm9ybWFsRmxvdyI+PC9kaXY+Cisg
ICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InN1Y2Nlc3NvciI+PC9k
aXY+CiAgIDwvZGl2PgotICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0ic3VjY2Vzc29yIj48
L2Rpdj4KICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8L2JvZHk+CiA8L2h0bWw+Ci0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBv
c2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmct
cG9zaXRpb25lZC1hbmNlc3Rvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThjMTBkYmExZjhh
YmFjYTRkZjI5MTMxOWFmMmUyY2I3NjdhNjlkOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBv
c2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorUGFzc2VkIC0g
bGF5ZXIgdHJlZS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZs
b3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1s
IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1z
Y3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjA1YWU5ZGFj
NTU0MGE5OGUwYmJkZDUwMjg4ZDM2NDdkM2MwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1w
b3NpdGlvbmVkLWFuY2VzdG9yLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1s
IFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICAiaHR0
cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKworPGh0bWwgbGFuZz0iZW4iPgor
PGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9o
dG1sOyBjaGFyc2V0PXV0Zi04Ii8+CisgIDx0aXRsZT5PcHRpbmcgaW50byBjb21wb3NpdGVkIHNj
cm9sbGluZzwvdGl0bGU+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+
CisgICAgLmNvbnRhaW5lciB7CisgICAgICB3aWR0aDogMjAwcHg7CisgICAgICBoZWlnaHQ6IDIw
MHB4OworICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgICAgIG1hcmdpbjogMjBweDsKKyAgICAg
IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgIH0KKworICAgIC5zY3JvbGxlZCB7CisgICAg
ICB3aWR0aDogMTgwcHg7CisgICAgICBoZWlnaHQ6IDkwcHg7CisgICAgICBtYXJnaW46IDEwcHg7
CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OworICAgICAgcG9zaXRpb246IHJlbGF0aXZl
OworICAgIH0KKworICAgIC5wb3NpdGlvbmVkIHsKKyAgICAgIHdpZHRoOiAxMjBweDsKKyAgICAg
IGhlaWdodDogMjQwcHg7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgfQorCisgICAg
I2ZpcnN0Q2hpbGQgeworICAgICAgei1pbmRleDogMTsKKyAgICB9CisKKyAgICAjc2Vjb25kQ2hp
bGQgeworICAgICAgei1pbmRleDogMjsKKyAgICB9CisKKyAgICAjcHJlZGVjZXNzb3IgeworICAg
ICAgbGVmdDogMjBweDsKKyAgICAgIHRvcDogMjBweDsKKyAgICAgIHotaW5kZXg6IDA7CisgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICB9CisKKyAgICAjYW5jZXN0b3IgeworICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICB2YXIgZGVidWdN
b2RlID0gZmFsc2U7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgd2lu
ZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZs
b3dTY3JvbGxFbmFibGVkKHRydWUpOworCisgICAgZnVuY3Rpb24gd3JpdGUoc3RyKQorICAgIHsK
KyAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAg
ICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIgKyAnXG4nKTsKKyAgICAg
IHByZS5hcHBlbmRDaGlsZCh0ZXh0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkb1Rlc3QoKQor
ICAgIHsKKyAgICAgIHZhciBwcmVkZWNlc3NvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdw
cmVkZWNlc3NvcicpOworICAgICAgdmFyIGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2FuY2VzdG9yJyk7CisgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NvbnRhaW5lcicpOworICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZmlyc3RDaGlsZCcpOworICAgICAgdmFyIHNlY29uZENoaWxkID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29uZENoaWxkJyk7CisKKyAgICAgIC8vIEZvcmNlIGEgc3R5
bGUgcmVjYWxjLgorICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIGlmICh3
aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgICB3
aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisgICAgICAgIHZhciBsYXll
clRyZWUgPSB3aW5kb3cuaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCk7CisKKyAg
ICAgICAgaWYgKCFsYXllclRyZWUpCisgICAgICAgICAgd3JpdGUoJ0ZBSUxFRCAtIG5vIGxheWVy
IHRyZWUuJykKKyAgICAgICAgZWxzZQorICAgICAgICAgIHdyaXRlKCdQYXNzZWQgLSBsYXllciB0
cmVlLicpCisKKyAgICAgICAgaWYgKGxheWVyVHJlZSAmJiBkZWJ1Z01vZGUpCisgICAgICAgICAg
ICB3cml0ZShsYXllclRyZWUpOworICAgICAgfQorICAgIH0gLy8gZnVuY3Rpb24gZG9UZXN0CisK
KyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICA8
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlk
PSJwcmVkZWNlc3NvciI+PC9kaXY+CisgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJhbmNl
c3RvciI+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBpZD0iY29udGFpbmVyIj4KKyAgICAg
IDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0iZmlyc3RDaGlsZCI+PC9kaXY+CisgICAgICA8ZGl2
IGNsYXNzPSJzY3JvbGxlZCIgaWQ9InNlY29uZENoaWxkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAg
PC9kaXY+CisgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYjVh
NTJlNmU4OTBjOGFkZTBjNWRkODg0ZTZkODA1YTM2OTYzMDlmMS4uYWFkOTIzNDc4NDQ3ZjFjNTFm
NDNiMTBmYmRiN2Y5NWNjZDhhMjQyYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNjk4LDYgKzM2OTgsMTMgQEAgd2Via2l0Lm9yZy9i
LzEwMzE1NiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9jb21wb3NpdGVkc2Nyb2xsaW5n
L3Njcm9sbGJhcnMKICMgUmVxdWlyZXMgYW4gdXBkYXRlZCBiYXNlbGluZSBhZnRlciAxMDYxNDIu
CiB3ZWJraXQub3JnL2IvMTA2ODIwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2NvbXBv
c2l0ZWRzY3JvbGxpbmcvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgWyBGYWlsdXJlIF0K
IAorIyBOZWVkcyByZWJhc2VsaW5lIGFmdGVyIDEwOTMwMi4KK3dlYmtpdC5vcmcvYi8xMDk5NjUg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9vdmVyZmxv
dy90ZXh0YXJlYS1zY3JvbGwtdG91Y2guaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzEw
OTk2NSBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcvb3ZlcmZs
b3cvdGV4dGFyZWEtc2Nyb2xsLXRvdWNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8x
MDk5NjUgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9z
Y3JvbGxiYXJzL292ZXJmbG93LXNjcm9sbGJhci1jb21iaW5hdGlvbnMuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzEwOTk2NSBjb21wb3NpdGluZy9vdmVyZmxvdy90ZXh0YXJlYS1zY3Jv
bGwtdG91Y2guaHRtbCBbIEZhaWx1cmUgXQorCisKICMgRmFpbHMgZHVlIHRvIEJ1ZyA4NTg1Ni4K
IHdlYmtpdC5vcmcvYi84NTg1NiBbIFdpbiBNYWMgQW5kcm9pZCBdIGZhc3QvYmxvY2svZmxvYXQv
MDI4Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84NTg1NiBbIFdpbiBN
YWMgQW5kcm9pZCBdIGZhc3QvYmxvY2svZmxvYXQvMDI2Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191777</attachid>
            <date>2013-03-06 09:47:59 -0800</date>
            <delta_ts>2013-03-08 12:39:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130306124404.patch</filename>
            <type>text/plain</type>
            <size>54977</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0OTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjBiNWQ3MDVhYzMzMjNm
ZTk5MzExMjZkZTJjNDhiYThkYWFmZTNlZS4uMzQ4NzFlOWYyYTA2MTJkOGFiZDg3NTNlMDc2NzA0
NWJjZjkwZGYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAzLTA2ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBJZiB0aGUgdHdvIGxpc3RzIGFy
ZSBpbiBmYWN0IHRoZSBzYW1lLCB0aGVuCisgICAgICAgIHdlIGtub3cgaXQgaXMgc2FmZSB0byBw
cm9tb3RlIHRoZSBsYXllciB0byBiZSBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhpcworICAgICAg
ICBzaG91bGQgYmUgbW9yZSBpbnR1aXRpdmUgYW5kIG1vcmUgcm9idXN0IHRoYW4gdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cv
b3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sCisg
ICAgICAgIFRlc3Q6IGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8t
Y29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6Cisg
ICAgICAgIFJlbmFtZWQgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIg
LT4KKyAgICAgICAgbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ2NvbnRhaW5lcgorICAgICAgICAo
V2ViQ29yZTo6aXNQb3NpdGlvbmVkQ29udGFpbmVyKToKKyAgICAgICAgTW92ZWQgaGlnaGVyIHVw
IGluIHRoZSBmaWxlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRT
dGFja2luZ09yZGVyRWxlbWVudEF0KToKKyAgICAgICAgR2V0IFJlbmRlckxheWVyIGF0IHN0YWNr
aW5nIG9yZGVyIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNh
bkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAgICBDb21wdXRlIHdoZXRoZXIgdGhlIGN1cnJl
bnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRvIGEgc3RhY2tpbmcKKyAgICAgICAgY29udGFpbmVy
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250
YWluZXJSZWN1cnNpdmVseSk6CisgICAgICAgIENvbXB1dGUgd2hldGhlciBhbGwgY2hpbGQgbGF5
ZXJzIGNhbiBiZSBwcm9tb3RlZCB0byBzdGFja2luZworICAgICAgICBjb250YWluZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAg
ICAgICBSZW5hbWVkIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyIC0+
CisgICAgICAgIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWluZXIKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVJc05vcm1hbEZsb3dPbmx5KToKKyAgICAgICAgUmVm
YWN0b3JlZCBsb2dpYyBmcm9tIHN0eWxlQ2hhbmdlZCB0byByZWZyZXNoIHRoZSBpc05vcm1hbEZs
b3dPbmx5CisgICAgICAgIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcpOgorICAgICAgICBBZGRlZCBjYWxsIHRvIHVwZGF0
ZUlzTm9ybWFsRmxvd09ubHkoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVMYXllckxpc3RzSWZOZWVkZWQpOgorICAgICAgICBVcGRhdGVkIHRvIGNhbGwgdXBkYXRlQ2Fu
QmVTdGFja2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KCkgaW5zdGVhZCBvZgorICAgICAgICB1cGRh
dGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5n
ZSk6CisgICAgICAgIFNtYWxsIGNvcnJlY3RuZXNzIGZpeDogaXNTdGFja2luZ0NvbnRleHQgY29u
ZGl0aW9ucyBzaG91bGQgYmUKKyAgICAgICAgaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2lu
Z0NvbnRhaW5lcigpCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAg
IChSZW5kZXJMYXllcik6CisKIDIwMTMtMDMtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBQYXNzIFN0cmluZzo6U3Ry
aWN0Q29udmVyc2lvbiBpbnN0ZWFkIG9mIHRydWUgdG8gU3RyaW5nOjp1dGY4KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDUxZDI0NDNkOGMyZmM2MjY2Mzcy
NGM1MzNiNTY1ZjJhNDk2N2U1OTYuLjRlMTI0NGQwNTY2ZmIxNTQ5ZmVhZWYyODgwODVjNTZjMTcz
N2FkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTU0
LDcgKzE1NCw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZW5kZXJlcikKICAgICAsIG1faGFzT3V0T2ZGbG93UG9zaXRpb25lZERlc2NlbmRhbnQo
ZmFsc2UpCiAgICAgLCBtX2hhc091dE9mRmxvd1Bvc2l0aW9uZWREZXNjZW5kYW50RGlydHkodHJ1
ZSkKICAgICAsIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKGZhbHNlKQotICAgICwgbV9kZXNj
ZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoZmFsc2UpCisgICAgLCBtX2NhbkJl
UHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVyKGZhbHNlKQogICAgICwgbV9pc1Jvb3RMYXllcihy
ZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2Up
CiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkKQEAgLTUzOCwxNjMgKzUz
OCwyNzAgQEAgYm9vbCBSZW5kZXJMYXllcjo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJm
bG93U2Nyb2xsRW5hYmxlZCgpIGNvbnN0CiAgICAgICAgICYmIHJlbmRlcmVyKCktPmZyYW1lKCkt
PnBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Ny
b2xsRW5hYmxlZCgpOwogfQogCi0vLyBJZiB3ZSBhcmUgYSBzdGFja2luZyBjb250YWluZXIsIHRo
ZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGRldGVybWluZSBpZiBvdXIKLS8vIGRlc2NlbmRhbnRzIGZv
ciBhIGNvbnRpZ3VvdXMgYmxvY2sgaW4gc3RhY2tpbmcgb3JkZXIuIFRoaXMgaXMgcmVxdWlyZWQg
aW4KLS8vIG9yZGVyIGZvciBhbiBlbGVtZW50IHRvIGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0
YWNraW5nIGNvbnRhaW5lci4gSXQgaXMgc2FmZQotLy8gdG8gYmVjb21lIGEgc3RhY2tpbmcgY29u
dGFpbmVyIGlmIHRoaXMgY2hhbmdlIHdvdWxkIG5vdCBhbHRlciB0aGUgc3RhY2tpbmcKLS8vIG9y
ZGVyIG9mIGxheWVycyBvbiB0aGUgcGFnZS4gVGhhdCBjYW4gb25seSBoYXBwZW4gaWYgYSBub24t
ZGVzY2VuZGFudCBhcHBlYXIKLS8vIGJldHdlZW4gdXMgYW5kIG91ciBkZXNjZW5kYW50cyBpbiBz
dGFja2luZyBvcmRlci4gSGVyZSdzIGFuIGV4YW1wbGU6Ci0vLwotLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyAgfCAgXC4KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgICBCICAgQwotLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXCAgIHwgICAvXC4KLS8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwIC04ICBEICAyICA3Ci0vLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLS8v
Ci0vLyBJJ3ZlIGxhYmVsZWQgb3VyIG5vcm1hbCBmbG93IGRlc2NlbmRhbnRzIEEsIEIsIEMsIGFu
ZCBELCBvdXIgc3RhY2tpbmcKLS8vIGNvbnRhaW5lciBkZXNjZW5kYW50cyB3aXRoIHRoZWlyIHog
aW5kaWNlcywgYW5kIHVzIHdpdGggJ3RoaXMnICh3ZSdyZSBhCi0vLyBzdGFja2luZyBjb250YWlu
ZXIgYW5kIG91ciB6SW5kZXggZG9lc24ndCBtYXR0ZXIgaGVyZSkuIFRoZXNlIG5vZGVzIGFwcGVh
ciBpbgotLy8gdGhyZWUgbGlzdHM6IHBvc1pPcmRlciwgbmVnWk9yZGVyLCBhbmQgbm9ybWFsIGZs
b3cgKGtlZXAgaW4gbWluZCB0aGF0IG5vcm1hbAotLy8gZmxvdyBsYXllcnMgZG9uJ3Qgb3Zlcmxh
cCkuIFNvIGlmIHdlIGFycmFuZ2UgdGhlc2UgbGlzdHMgaW4gb3JkZXIgd2UgZ2V0IG91cgotLy8g
c3RhY2tpbmcgb3JkZXI6Ci0vLwotLy8gICAgICAgICAgICAgICAgICAgICBbLThdLCBbQS1EXSwg
WzAsIDIsIDUsIDddLS0+IHBvcyB6LW9yZGVyLgotLy8gICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgIHwKLS8vICAgICAgICBOZWcgei1vcmRlci4gPC0rICAgICArLS0+IE5vcm1hbCBmbG93IGRl
c2NlbmRhbnRzLgotLy8KLS8vIFdlIGNhbiB0aGVuIGFzc2lnbiBuZXcsICdzdGFja2luZycgb3Jk
ZXIgaW5kaWNlcyB0byB0aGVzZSBlbGVtZW50cyBhcyBmb2xsb3dzOgotLy8KLS8vICAgICAgICAg
ICAgICAgICAgICAgWy04XSwgW0EtRF0sIFswLCAyLCA1LCA3XQotLy8gJ1N0YWNraW5nJyBpbmRp
Y2VzOiAgLTEgICAgIDAgICAgIDEgIDIgIDMgIDQKLS8vCi0vLyBOb3RlIHRoYXQgdGhlIG5vcm1h
bCBmbG93IGRlc2NlbmRhbnRzIGNhbiBzaGFyZSBhbiBpbmRleCBiZWNhdXNlIHRoZXkgZG9uJ3QK
LS8vIHN0YWNrL292ZXJsYXAuIE5vdyBvdXIgcHJvYmxlbSBiZWNvbWVzIHZlcnkgc2ltcGxlOiBh
IGxheWVyIGNhbiBzYWZlbHkgYmVjb21lCi0vLyBhIHN0YWNraW5nIGNvbnRhaW5lciBpZiB0aGUg
c3RhY2tpbmctb3JkZXIgaW5kaWNlcyBvZiBpdCBhbmQgaXRzIGRlc2NlbmRhbnRzCi0vLyBhcHBl
YXIgaW4gYSBjb250aWd1b3VzIGJsb2NrIGluIHRoZSBsaXN0IG9mIHN0YWNraW5nIGluZGljZXMu
IFRoaXMgcHJvYmxlbQotLy8gY2FuIGJlIHNvbHZlZCB2ZXJ5IGVmZmljaWVudGx5IGJ5IGNhbGN1
bGF0aW5nIHRoZSBtaW4vbWF4IHN0YWNraW5nIGluZGljZXMgaW4KLS8vIHRoZSBzdWJ0cmVlLCBh
bmQgdGhlIG51bWJlciBzdGFja2luZyBjb250YWluZXIgZGVzY2VuZGFudHMuIE9uY2Ugd2UgaGF2
ZSB0aGlzCi0vLyBpbmZvcm1hdGlvbiwgd2Uga25vdyB0aGF0IHRoZSBzdWJ0cmVlJ3MgaW5kaWNl
cyBmb3JtIGEgY29udGlndW91cyBibG9jayBpZjoKLS8vCi0vLyAgICAgICAgICAgbWF4U3RhY2tJ
bmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50cwotLy8KLS8vIFNvIGZvciBu
b2RlIEEgaW4gdGhlIGV4YW1wbGUgYWJvdmUgd2Ugd291bGQgaGF2ZToKLS8vICAgbWF4U3RhY2tJ
bmRleCA9IDEKLS8vICAgbWluU3RhY2tJbmRleCA9IC0xCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9
IDIKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc2l0aW9uZWRDb250YWluZXIoY29uc3QgUmVuZGVy
TGF5ZXIqIGxheWVyKQoreworICAgIC8vIEZJWE1FOiBUaGlzIG1heSBub3QgYmUgaW4gc3luYyB3
aXRoIGNvbnRhaW5pbmdCbG9jay4KKyAgICAvLyBSZW5kZXJPYmplY3Q6OmNhbkNvbnRhaW5GaXhl
ZFBvc2l0aW9uZWRPYmplY3QoKSBzaG91bGQgcHJvYmFibHkgYmUgdXNlZAorICAgIC8vIGluc3Rl
YWQuCisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5ZXJSZW5kZXJlciA9IGxheWVyLT5y
ZW5kZXJlcigpOworICAgIHJldHVybiBsYXllci0+aXNSb290TGF5ZXIoKSB8fCBsYXllclJlbmRl
cmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+aGFzVHJhbnNmb3JtKCk7Cit9CisKK2VudW0g
U3RhY2tpbmdPcmRlckRpcmVjdGlvbiB7IEZyb21CYWNrZ3JvdW5kLCBGcm9tRm9yZWdyb3VuZCB9
OworCisvLyBXZSdkIGxpa2UgdG8gYmUgYWJsZSB0byBpdGVyYXRlIHRocm91Z2ggYSBzaW5nbGUg
cGFpbnQgb3JkZXIgbGlzdCwgYnV0IGZvcgorLy8gZWZmaWNpZW5jeSdzIHNha2UsIHdlIGhhbmcg
b250byB0d28gbGlzdHMgaW5zdGVhZCAobmFtZWx5LCB0aGUgcG9zIGFuZCBuZWcKKy8vIHotb3Jk
ZXIgbGlzdHMgcHJvZHVjZWQgYnkgQ29sbGVjdExheWVycykuIFRoaXMgZnVuY3Rpb24gYWxsb3dz
IHVzIHRvIGluZGV4CisvLyBpbnRvIHRoZXNlIHR3byBsaXN0cyBhcyBpZiB0aGV5IHdlcmUgb25l
LiBJdCBhbHNvIGFsbG93cyB1cyB0byBpbmRleCBpbnRvCisvLyB0aGlzIHZpcnR1YWwgbGlzdCBl
aXRoZXIgZnJvbSB0aGUgc3RhcnQgb3IgZnJvbSB0aGUgZW5kIChpLmUuLCBpbiBlaXRoZXIKKy8v
IHN0YWNraW5nIG9yZGVyIGRpcmVjdGlvbikuCitzdGF0aWMgY29uc3QgUmVuZGVyTGF5ZXIqIGdl
dFN0YWNraW5nT3JkZXJFbGVtZW50QXQoY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc1pP
cmRlckxpc3QsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0LCBjb25z
dCBTdGFja2luZ09yZGVyRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qgc2l6ZV90IGluZGV4KQor
eworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QgPyBuZWdaT3Jk
ZXJMaXN0LT5zaXplKCkgOiAwOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBGcm9tQmFja2dyb3Vu
ZCkgeworICAgICAgICBpZiAoaW5kZXggPCBuZWdaT3JkZXJMaXN0U2l6ZSkKKyAgICAgICAgICAg
IHJldHVybiBuZWdaT3JkZXJMaXN0LT5hdChpbmRleCk7CisKKyAgICAgICAgcmV0dXJuIHBvc1pP
cmRlckxpc3QtPmF0KGluZGV4IC0gbmVnWk9yZGVyTGlzdFNpemUpOworICAgIH0KKworICAgIHNp
emVfdCBwb3NaT3JkZXJMaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QgPyBwb3NaT3JkZXJMaXN0LT5z
aXplKCkgOiAwOworCisgICAgaWYgKGluZGV4IDwgcG9zWk9yZGVyTGlzdFNpemUpCisgICAgICAg
IHJldHVybiBwb3NaT3JkZXJMaXN0LT5hdChwb3NaT3JkZXJMaXN0U2l6ZSAtIGluZGV4IC0gMSk7
CisKKyAgICByZXR1cm4gbmVnWk9yZGVyTGlzdC0+YXQobmVnWk9yZGVyTGlzdFNpemUgLSAocG9z
Wk9yZGVyTGlzdFNpemUgLSBpbmRleCkgLSAxKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6Y29s
bGVjdEJlZm9yZUFmdGVyUHJvbW90aW9uWk9yZGVyTGlzdHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
U3RhY2tpbmdDb250ZXh0LAorICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiBwb3Na
T3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4g
PiYgbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGUsCisgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJM
YXllcio+ID4mIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUsCisgICAgT3duUHRyPFZlY3RvcjxS
ZW5kZXJMYXllcio+ID4mIG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGUpCit7CisgICAgLy8gV2Ug
Y2FuJ3QgdXNlIFRlbXBvcmFyeUNoYW5nZTw+IGhlcmUgc2luY2UgbV9uZWVkc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcgYW5kCisgICAgLy8gbV9pc05vcm1hbEZsb3dPbmx5IGFyZSBib3RoIGJpdGZpZWxk
cywgc28gd2UgaGF2ZSB0byBkbyBpdCB0aGUKKyAgICAvLyBvbGQtZmFzaGlvbmVkIHdheS4KKyAg
ICBib29sIG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IG1fbmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nOworICAgIGJvb2wgb2xkSXNOb3JtYWxGbG93T25seSA9IG1faXNOb3JtYWxGbG93T25s
eTsKKworICAgIC8vIFNldCB0aGUgZmxhZyBvbiB0aGUgY3VycmVudCBsYXllciwgdGhlbiByZWJ1
aWxkIGFuY2VzdG9yIHN0YWNraW5nCisgICAgLy8gY29udGV4dCdzIGxpc3RzLiBUaGlzIHdheSwg
d2UgY2FuIHNlZSB0aGUgZXhhY3QgZWZmZWN0cyB0aGF0IHByb21vdGluZworICAgIC8vIHRoaXMg
bGF5ZXIgd291bGQgY2F1c2UuCisgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gdHJ1ZTsKKyAgICBt
X25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGZhbHNlOworICAgIGFuY2VzdG9yU3RhY2tpbmdD
b250ZXh0LT5yZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tpbmdDb250YWluZXJzLCBwb3Na
T3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwgbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGUpOworCisg
ICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gZmFsc2U7CisgICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcgPSB0cnVlOworICAgIGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0LT5yZWJ1aWxkWk9yZGVy
TGlzdHMoU3RvcEF0U3RhY2tpbmdDb250YWluZXJzLCBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3Rl
LCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlKTsKKworICAgIG1fbmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nID0gb2xkTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOworICAgIG1faXNOb3JtYWxGbG93
T25seSA9IG9sZElzTm9ybWFsRmxvd09ubHk7Cit9CisKKy8vIEFmdGVyIHByb21vdGlvbiwgdGhl
IHBhaW50IG9yZGVyIGNvbnNpc3RzIG9mIAorLy8gYSkgdGhlIG5vbi1kZXNjZW5kYW50cyB3aGlj
aCBwcmVjZWRlIHRoZSBwcm9tb3RlZCBsYXllciwgCisvLyBiKSB0aGUgcHJvbW90ZWQgbGF5ZXIs
IGFuZCAKKy8vIGMpIHRoZSBub24tZGVzY2VuZGFudHMgd2hpY2ggc3VjY2VlZCB0aGUgcHJvbW90
ZWQgbGF5ZXIuIAogLy8KLS8vIGFuZCBzbywKLS8vICAgICAgIG1heFN0YWNrSW5kZXggLSBtaW5T
dGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMKLS8vICA9PT0+ICAgICAgICAgICAgICAgICAg
ICAgIDEgLSAoLTEpID09IDIKLS8vICA9PT0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
ID09IDIKKy8vIElmIHRoZSBjdXJyZW50IGxheWVyJ3MgZGVzY2VuZGFudHMgZm9ybSBhIGNvbnRp
Z3VvdXMgYmxvY2sgaW4gcGFpbnQgb3JkZXIKKy8vIGJlZm9yZSBwcm9tb3Rpb24sIHRoZSBwYWlu
dCBvcmRlciB3aWxsIGNvbnNpc3Qgb2YKKy8vIGEpIHRoZSBub24tZGVzY2VuZGFudHMgd2hpY2gg
cHJlY2VkZSB0aGUgY3VycmVudCBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzLCAKKy8vIGIpIHRo
ZSBjdXJyZW50IGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMgCisvLyBjKSBUaGUgbm9uLWRlc2Nl
bmRhbnRzIHdoaWNoIHN1Y2NlZWQgdGhlIGN1cnJlbnQgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50
cy4KIC8vCi0vLyAgU2luY2UgdGhpcyBpcyB0cnVlLCBBIGNhbiBzYWZlbHkgYmVjb21lIGEgc3Rh
Y2tpbmcgY29udGFpbmVyLgotLy8gIE5vdywgZm9yIG5vZGUgQyB3ZSBoYXZlOgorLy8gU3ViLWxp
c3RzIChhKSBhbmQgKGMpIHNob3VsZCBiZSBpZGVudGljYWwgaW4gYm90aCBwYWludCBvcmRlciBs
aXN0cyBpZgorLy8gYW5kIG9ubHkgaWYgdGhlIGRlc2NlbmRhbnRzIGZvcm0gYSBjb250aWd1b3Vz
IGJsb2NrLiBJbiBmYWN0LCB0aGlzIGlzIHRoZQorLy8gb25seSBjaGVjayB3ZSBuZWVkIHRvIHBl
cmZvcm0gc2luY2UgdGhlIG9yZGVyIG9mIHRoZSBkZXNjZW5kYW50cyB3aXRoCisvLyByZXNwZWN0
IHRvIGVhY2ggb3RoZXIgY2Fubm90IGJlIGFmZmVjdGVkIGJ5IHByb21vdGlvbiAoaS5lLiwgd2Ug
ZG9uJ3QKKy8vIG5lZWQgdG8gd29ycnkgYWJvdXQgc3ViLWxpc3QgKGIpKS4KIC8vCi0vLyAgIG1h
eFN0YWNrSW5kZXggPSA0Ci0vLyAgIG1pblN0YWNrSW5kZXggPSAwIDwtLSBiZWNhdXNlIEMgaGFz
IHN0YWNraW5nIGluZGV4IDAuCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9IDIKKy8vIFNvbWUgZXhh
bXBsZXM6CisvLyBDID0gY3VycmVudExheWVyCisvLyAtID0gbmVnYXRpdmUgei1vcmRlciBjaGls
ZCBvZiBjdXJyZW50TGF5ZXIKKy8vICsgPSBwb3NpdGl2ZSB6LW9yZGVyIGNoaWxkIG9mIGN1cnJl
bnRMYXllcgorLy8gQSA9IHBvc2l0aW9uZWQgYW5jZXN0b3Igb2YgY3VycmVudExheWVyCisvLyB4
ID0gYW55IG90aGVyIFJlbmRlckxheWVyIGluIHRoZSBsaXN0CiAvLwotLy8gYW5kIHNvLAotLy8g
ICAgICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50cwot
Ly8gID09PT4gICAgICAgICAgICAgICAgICAgICAgICAgNCAtIDAgPT0gMgotLy8gID09PT4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDQgPT0gMgorLy8gICAgICAgIG9yaWdpbmFsICAgICAg
ICAgICAgICAgICAgICB8ICAgek9yZGVyTGlzdEJlZm9yZVByb21vdGUgICAgfCAgek9yZGVyTGlz
dEFmdGVyUHJvbW90ZQorLy8gICAgICAgIHpPcmRlckxpc3RCZWZvcmVQcm9tb3RlICAgICB8ICBh
ZnRlciBpbnNlcnRpbmcgQyBhcyBhYm92ZSAgfAorLy8gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gKDEpICAgICB4LS0tKysreCAgICAgICAgICAgICAgICAgICB8ICB4LS0t
QysrK3ggICAgICAgICAgICAgICAgICAgfCAgICAgeEN4CisvLyAoMikgICAgIHgtLS0rQSsreCAg
ICAgICAgICAgICAgICAgIHwgIHgtLS0rQUMrK3ggICAgICAgICAgICAgICAgICB8ICAgICB4QUN4
CisvLyAoMykgICAgIHgteC0tKysreCAgICAgICAgICAgICAgICAgIHwgIHgteC0tQysrK3ggICAg
ICAgICAgICAgICAgICB8ICAgICB4eEN4CisvLyAoNCkgICAgIHh4QSsreCAgICAgICAgICAgICAg
ICAgICAgIHwgIHh4QUMrK3ggICAgICAgICAgICAgICAgICAgICB8ICAgICB4eEFDeAogLy8KLS8v
IFNpbmNlIHRoaXMgaXMgZmFsc2UsIEMgY2Fubm90IGJlIHNhZmVseSBwcm9tb3RlZCB0byBhIHN0
YWNraW5nIGNvbnRhaW5lci4gVGhpcwotLy8gaGFwcGVuZWQgYmVjYXVzZSBvZiB0aGUgZWxlbWVu
dHMgd2l0aCB6LWluZGV4IDUgYW5kIDAuIE5vdyBpZiA1IGhhZCBiZWVuIGEKLS8vIGNoaWxkIG9m
IEMgcmF0aGVyIHRoYW4gRCwgYW5kIEEgaGFkIG5vIGNoaWxkIHdpdGggWiBpbmRleCAwLCB3ZSB3
b3VsZCBoYXZlIGhhZDoKKy8vIEluIGV4YW1wbGUgKDEpLCB3ZSBjb21wYXJlIHN1Yi1saXN0IChh
KSBieSBtYXJjaGluZyBmcm9tIHRoZSBsZWZ0IG9mIGJvdGgKKy8vIGxpc3RzICh6T3JkZXJMaXN0
QmVmb3JlUHJvbW90ZSBhZnRlciBpbnNlcnRpbmcgQyBhbmQKKy8vIHpPcmRlckxpc3RBZnRlclBy
b21vdGUpLiBUaGUgZmlyc3QgbWlzbWF0Y2ggaXMgYXQgaW5kZXggMSB3aGVuIHdlIGhpdCAnLScK
Ky8vIGFuZCAnQycuIFRoYXQgbWVhbnMgd2UgaGF2ZSBuZWcgei1vcmRlciBkZXNjZW5kYW50cy4g
VGhpcyBpcyBhIHByb2JsZW0gaWYKKy8vIHdlIGhhdmUgYSBiYWNrZ3JvdW5kLiBCZWZvcmUgcHJv
bW90aW9uLCB0aGlzIGJnIHdvdWxkIGdldCBwYWludGVkIHdpdGgKKy8vIHRoZSBjdXJyZW50IGxh
eWVyIChpLmUuLCBhZnRlciB0aGUgbmVnIHotb3JkZXIgZGVzY2VuZGFudHMpLCBidXQgYWZ0ZXIK
Ky8vIHByb21vdGlvbiB0aGUgYmcgd291bGQgZ2V0IHBhaW50ZWQgYmVmb3JlIHRoZW0uIFRoaXMg
aXMgYSBzdGFja2luZyBvcmRlcgorLy8gdmlvbGF0aW9uIGFuZCB3ZSBjYW4ndCBwcm9tb3RlLiBI
b3dldmVyLCBpZiB3ZSBkb24ndCBoYXZlIGEgYmFja2dyb3VuZCwKKy8vIHdlIHdvdWxkIGNvbnRp
bnVlIG9uIHRvIHRoZSBzZWNvbmQgcGFzcy4gV2hlbiBjb21wYXJpbmcgZnJvbSB0aGUgcmlnaHQs
CisvLyB3ZSBtaXNtYXRjaCBvbiAnKycgYW5kICdDJy4gU2luY2Ugd2UgaGl0ICdDJyBvbiB6T3Jk
ZXJMaXN0QWZ0ZXJQcm9tb3RlLAorLy8gd2Uga25vdyB0aGF0IHRoZSBjaGlsZHJlbiBhcmUgY29u
dGlndW91cywgYW5kIHdlIHdpbGwgcHJvbW90ZS4KIC8vCi0vLyAgIG1heFN0YWNrSW5kZXggPSAz
Ci0vLyAgIG1pblN0YWNrSW5kZXggPSAwIDwtLSBiZWNhdXNlIEMgaGFzIHN0YWNraW5nIGluZGV4
IDAuCi0vLyAgIG51bVNDRGVjZW5kYW50cyA9IDMKKy8vIEluIGV4YW1wbGUgKDIpLCB3aGVuIG1h
cmNoaW5nIGZyb20gdGhlIGxlZnQsIHdlJ2xsIGhpdCBhIG1pc21hdGNoIGFnYWluCisvLyBvbiB0
aGUgc2Vjb25kIGVsZW1lbnQgd2UgbG9vayBhdC4gVGhpcyB0aW1lLCBzaW5jZSB0aGlzIGVsZW1l
bnQgaXMgYW4gJ0EnCisvLyBpbiB6T3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLCB0aGlzIGluZGljYXRl
cyB0aGF0IHRoZXJlIGlzIGFuIGV4dHJhIGxheWVyCisvLyAodGhlICdBJykgbWl4ZWQgaW4gd2l0
aCB0aGUgY2hpbGRyZW4uIFRoaXMgY291bGQgY2F1c2UgYSBjaGFuZ2UgaW4gcGFpbnQKKy8vIG9y
ZGVyIGlmIHdlIHByb21vdGUsIHNvIHdlIGRlY2lkZSBub3QgdG8gYW5kIGJyZWFrIG91dCBvZiB0
aGUgbG9vcC4gTm90ZQorLy8gdGhhdCBpZiB0aGUgY3VycmVudCBsYXllciBoYXMgYSBiYWNrZ3Jv
dW5kLCB0aGlzIHdvdWxkIHByb3ZpZGUgYSBzZWNvbmQKKy8vIHJlYXNvbiBub3QgdG8gb3B0IGlu
LCBzaW5jZSBhZ2FpbiB3ZSBoYXZlIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRyZW4gd2hvCisvLyB3
b3VsZCBjaGFuZ2UgcGFpbnQgb3JkZXIgd2l0aCByZXNwZWN0IHRvIG91ciBiYWNrZ3JvdW5kIGlm
IHdlIHByb21vdGVkLgogLy8KLS8vIGFuZCBzbywKLS8vICAgICAgIG1heFN0YWNrSW5kZXggLSBt
aW5TdGFja0luZGV4ID09IG51bVNDRGVzY2VuZGFudHMKLS8vICA9PT0+ICAgICAgICAgICAgICAg
ICAgICAgICAgIDMgLSAwID09IDMKLS8vICA9PT0+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAzID09IDMKKy8vIEluIGV4YW1wbGUgKDMpLCB0aGUgZGlzY29udGlndWl0eSBvZiB0aGUgbmVn
YXRpdmUgei1vcmRlciBjaGlsZHJlbiBjYXVzZXMKKy8vIHVzIHRvIGZhaWwgZWFybHkgaW4gb3Vy
ICJGcm9tQmFja2dyb3VuZCIgcGFzcyB3aGVuIHdlIHRyeSB0byBjb21wYXJlICctJworLy8gZnJv
bSB6T3JkZXJMaXN0QmVmb3JlUHJvbW90ZSB3aXRoICd4JyBpbiB6T3JkZXJMaXN0QWZ0ZXJQcm9t
b3RlLgogLy8KLS8vICBBbmQgd2Ugd291bGQgY29uY2x1ZGUgdGhhdCBDIGNvdWxkIGJlIHByb21v
dGVkLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5T
dGFja2luZ09yZGVyKCkKLXsKLSAgICBpZiAoIWlzU3RhY2tpbmdDb250ZXh0KCkgfHwgIWFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKCFtX25vcm1hbEZsb3dMaXN0RGlydHkpOwotICAgIEFTU0VSVCgh
bV96T3JkZXJMaXN0c0RpcnR5KTsKLQotICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+
IHBvc1pPcmRlckxpc3Q7Ci0gICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4gbmVnWk9y
ZGVyTGlzdDsKLSAgICByZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tpbmdDb250ZXh0cywg
cG9zWk9yZGVyTGlzdCwgbmVnWk9yZGVyTGlzdCk7Ci0KLSAgICAvLyBDcmVhdGUgYSByZXZlcnNl
IGxvb2t1cC4KLSAgICBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgaW50PiBsb29rdXA7Ci0K
LSAgICBpZiAobmVnWk9yZGVyTGlzdCkgewotICAgICAgICBpbnQgc3RhY2tpbmdPcmRlckluZGV4
ID0gLTE7Ci0gICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJMYXllciogY3VycmVudExheWVyID0gbmVnWk9yZGVyTGlzdC0+YXQobGlzdFNp
emUgLSBpIC0gMSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRMYXllci0+aXNTdGFja2luZ0Nv
bnRleHQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxvb2t1cC5z
ZXQoY3VycmVudExheWVyLCBzdGFja2luZ09yZGVySW5kZXgtLSk7CisvLyBGaW5hbGx5IGluIGV4
YW1wbGUgKDQpLCB3ZSB3b3VsZCBtYXRjaCAneHhBQycgZnJvbSB0aGUgbGVmdCwgdGhlbiBzdG9w
CisvLyBzaW5jZSB3ZSBoaXQgJ0MnLiBUaGVuIHdlIHdvdWxkIG1hdGNoICd4JyBmcm9tIHRoZSBy
aWdodCwgYW5kIG1pc21hdGNoCisvLyBvbiAnKycgYW5kICdDJy4gU2luY2Ugd2UncmUgYXQgJ0Mn
IG9uIHRoZSB6T3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLCB3ZQorLy8gY29uY2x1ZGUgdGhhdCBhbGwg
dGhlIGNoaWxkcmVuIGFyZSBjb250aWd1b3VzLiBTaW5jZSB0aGVyZSBhcmUgbm8KKy8vIG5lZ2F0
aXZlIHotb3JkZXIgY2hpbGRyZW4sIGEgYmFja2dyb3VuZCBsYXllciBpcyBpcnJlbGV2YW50IGlu
IHRoaXMgY2FzZS4KKy8vIFdlIHdpbGwgb3B0IGluLCBrZWVwaW5nIHBhaW50IG9yZGVyIGNvbnN0
YW50Lgorc3RhdGljIGJvb2wgY29tcGFyZUxheWVyTGlzdHNCZWZvcmVBbmRBZnRlclByb21vdGUo
Y29uc3QgUmVuZGVyTGF5ZXIqIGN1cnJlbnRMYXllciwKKyAgICBjb25zdCBWZWN0b3I8UmVuZGVy
TGF5ZXIqPiogcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUsCisgICAgY29uc3QgVmVjdG9yPFJl
bmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLAorICAgIGNvbnN0IFZlY3Rv
cjxSZW5kZXJMYXllcio+KiBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLAorICAgIGNvbnN0IFZl
Y3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLAorICAgIGNvbnN0
IHNpemVfdCBzaXplQmVmb3JlUHJvbW90ZSwKKyAgICBjb25zdCBzaXplX3Qgc2l6ZUFmdGVyUHJv
bW90ZSwKKyAgICBjb25zdCBTdGFja2luZ09yZGVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZUJlZm9yZVByb21vdGUgJiYgaW5k
ZXggPCBzaXplQWZ0ZXJQcm9tb3RlOyBpbmRleCsrKSB7CisgICAgICAgIGNvbnN0IFJlbmRlckxh
eWVyKiBsYXllckJlZm9yZVByb21vdGUgPSBnZXRTdGFja2luZ09yZGVyRWxlbWVudEF0KHBvc1pP
cmRlckxpc3RCZWZvcmVQcm9tb3RlLCBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwgZGlyZWN0
aW9uLCBpbmRleCk7CisgICAgICAgIGNvbnN0IFJlbmRlckxheWVyKiBsYXllckFmdGVyUHJvbW90
ZSA9IGdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQocG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZSwg
bmVnWk9yZGVyTGlzdEFmdGVyUHJvbW90ZSwgZGlyZWN0aW9uLCBpbmRleCk7CisKKyAgICAgICAg
aWYgKGxheWVyQmVmb3JlUHJvbW90ZSAhPSBsYXllckFmdGVyUHJvbW90ZSkgeworICAgICAgICAg
ICAgLy8gSWYgd2UgZmluZCBhIG1pc21hdGNoLCB0aGUgb25seSBzaXR1YXRpb24gd2hlcmUgd2Ug
aGF2ZW4ndAorICAgICAgICAgICAgLy8gbmVjZXNzYXJpbHkgY2hhbmdlZCBwYWludCBvcmRlciB5
ZXQgaXMgaWYgbGF5ZXJBZnRlclByb21vdGUKKyAgICAgICAgICAgIC8vIGlzIGN1cnJlbnRMYXll
ci4KKyAgICAgICAgICAgIGlmIChsYXllckFmdGVyUHJvbW90ZSAhPSBjdXJyZW50TGF5ZXIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyBBbHNvLCBpZiB0
aGUgY3VycmVudCBsYXllciBoYXMgYSBiYWNrZ3JvdW5kLCB0aGVuIGFueQorICAgICAgICAgICAg
Ly8gbmVnYXRpdmUgei1vcmRlciBjaGlsZHJlbiB3aWxsIGdldCBiZXR3ZWVuIHRoZSBiYWNrZ3Jv
dW5kCisgICAgICAgICAgICAvLyBhbmQgdGhlIHJlc3Qgb2YgdGhlIGxheWVyLgorICAgICAgICAg
ICAgaWYgKGRpcmVjdGlvbiA9PSBGcm9tQmFja2dyb3VuZCAmJiBjdXJyZW50TGF5ZXItPnJlbmRl
cmVyKCktPmhhc0JhY2tncm91bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAocG9zWk9yZGVyTGlzdCkgewotICAgICAgICBzaXpl
X3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7Ci0gICAgICAgIGludCBzdGFja2lu
Z09yZGVySW5kZXggPSAxOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJyZW50TGF5ZXIgPSBwb3NaT3Jk
ZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGlmICghY3VycmVudExheWVyLT5pc1N0YWNraW5n
Q29udGV4dCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbG9va3Vw
LnNldChjdXJyZW50TGF5ZXIsIHN0YWNraW5nT3JkZXJJbmRleCsrKTsKLSAgICAgICAgfQorICAg
ICAgICAvLyBUbyBjb21wYXJlIHRoZSBzdWItbGlzdHMgKGEpIGFuZCAoYykgZnJvbSB0aGUgY29t
bWVudCBhYm92ZSwgd2Ugb25seQorICAgICAgICAvLyBuZWVkIHRvIG1hcmNoIHVudGlsIHdlIGhp
dCB0aGUgY3VycmVudExheWVyIGluIHRoZQorICAgICAgICAvLyB6T3JkZXJMaXN0QWZ0ZXJQcm9t
b3RlIGZyb20gZWFjaCBkaXJlY3Rpb24uCisgICAgICAgIGlmIChsYXllckFmdGVyUHJvbW90ZSA9
PSBjdXJyZW50TGF5ZXIpCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpbnQgbWlu
SW5kZXggPSAwOwotICAgIGludCBtYXhJbmRleCA9IDA7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAg
ICBib29sIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKLSAgICB1cGRhdGVEZXNjZW5kYW50c0FyZUNv
bnRpZ3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUobG9va3VwLCBtaW5JbmRleCwgbWF4SW5k
ZXgsIGNvdW50LCBmaXJzdEl0ZXJhdGlvbik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRl
clJlY3Vyc2l2ZShjb25zdCBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgaW50PiYgbG9va3Vw
LCBpbnQmIG1pbkluZGV4LCBpbnQmIG1heEluZGV4LCBpbnQmIGNvdW50LCBib29sIGZpcnN0SXRl
cmF0aW9uKQorLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgbGF5ZXIgY2FuIGJlIHBy
b21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVyLAorLy8gZ2l2ZW4gaXRzIGNsb3Nlc3Qgc3Rh
Y2tpbmcgY29udGV4dCBhbmNlc3Rvci4gV2UgZG8gdGhpcyBieSBjb21wdXRpbmcgd2hhdAorLy8g
cG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHotb3JkZXIgbGlzdHMgd291bGQgbG9vayBsaWtlIGJlZm9y
ZSBhbmQgYWZ0ZXIKKy8vIHByb21vdGlvbiwgYW5kIGVuc3VyaW5nIHRoYXQgcHJvcGVyIHN0YWNr
aW5nIG9yZGVyIGlzIHByZXNlcnZlZCBiZXR3ZWVuIHRoZQorLy8gdHdvIHNldHMgb2YgbGlzdHMu
CisvLworLy8gRm9yIG1vcmUgZGV0YWlscyBvbiBob3cgdGhlIGxpc3RzIHdpbGwgYmUgY29tcGFy
ZWQsIHNlZSB0aGUgY29tbWVudCBhbmQKKy8vIGV4YW1wbGVzIGZvciBjb21wYXJlTGF5ZXJMaXN0
c0JlZm9yZUFuZEFmdGVyUHJvbW90ZSgpLgordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2FuQmVT
dGFja2luZ0NvbnRhaW5lcihSZW5kZXJMYXllciogYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpCiB7
Ci0gICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkgJiYgIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAg
ICAgIGlmIChsb29rdXAuY29udGFpbnModGhpcykpIHsKLSAgICAgICAgICAgIG1pbkluZGV4ID0g
c3RkOjptaW4obWluSW5kZXgsIGxvb2t1cC5nZXQodGhpcykpOwotICAgICAgICAgICAgbWF4SW5k
ZXggPSBzdGQ6Om1heChtYXhJbmRleCwgbG9va3VwLmdldCh0aGlzKSk7Ci0gICAgICAgICAgICBj
b3VudCsrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKCFp
c1N0YWNraW5nQ29udGV4dCgpKTsKIAotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpbnQgY2hpbGRNaW5JbmRleCA9IDA7Ci0gICAgICAgIGludCBjaGlsZE1heEluZGV4ID0gMDsK
LSAgICAgICAgaW50IGNoaWxkQ291bnQgPSAwOwotICAgICAgICBjaGlsZC0+dXBkYXRlRGVzY2Vu
ZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyUmVjdXJzaXZlKGxvb2t1cCwgY2hpbGRN
aW5JbmRleCwgY2hpbGRNYXhJbmRleCwgY2hpbGRDb3VudCwgZmFsc2UpOwotICAgICAgICBpZiAo
Y2hpbGRDb3VudCkgewotICAgICAgICAgICAgY291bnQgKz0gY2hpbGRDb3VudDsKLSAgICAgICAg
ICAgIG1pbkluZGV4ID0gc3RkOjptaW4obWluSW5kZXgsIGNoaWxkTWluSW5kZXgpOwotICAgICAg
ICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgY2hpbGRNYXhJbmRleCk7CisgICAg
Ly8gRklYTUU6IFdlIGNhbiBlYXJseS1vdXQgb2YgdGhpcyBmdW5jdGlvbiBtb3JlCisgICAgLy8g
b2Z0ZW4gaWYgd2UgbWFpbnRhaW4gYSBkaXJ0eSBiaXQgZm9yIHRoZQorICAgIC8vIG1fY2FuQmVQ
cm9tb3RlZFRvU3RhY2tpbmdDb250YWluZXIgcHJvcGVydHkKKyAgICAvLyAoaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTk2NikKKworICAgIEFTU0VSVCghbV9ub3Jt
YWxGbG93TGlzdERpcnR5KTsKKyAgICBBU1NFUlQoIW1fek9yZGVyTGlzdHNEaXJ0eSk7CisKKyAg
ICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90
ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBuZWdaT3JkZXJMaXN0QmVmb3Jl
UHJvbW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0
QWZ0ZXJQcm9tb3RlOworICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pPcmRl
ckxpc3RBZnRlclByb21vdGU7CisKKyAgICBjb2xsZWN0QmVmb3JlQWZ0ZXJQcm9tb3Rpb25aT3Jk
ZXJMaXN0cyhhbmNlc3RvclN0YWNraW5nQ29udGV4dCwKKyAgICAgICAgcG9zWk9yZGVyTGlzdEJl
Zm9yZVByb21vdGUsIG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLAorICAgICAgICBwb3NaT3Jk
ZXJMaXN0QWZ0ZXJQcm9tb3RlLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlKTsKKworICAgIHNp
emVfdCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBwb3NaT3JkZXJMaXN0QmVmb3Jl
UHJvbW90ZSA/IHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNp
emVfdCBuZWdaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBuZWdaT3JkZXJMaXN0QmVmb3Jl
UHJvbW90ZSA/IG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNp
emVfdCBwb3NaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IHBvc1pPcmRlckxpc3RBZnRlclBy
b21vdGUgPyBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNpemVf
dCBuZWdaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IG5lZ1pPcmRlckxpc3RBZnRlclByb21v
dGUgPyBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAwOworCisgICAgY29uc3Qg
UmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRBbmNlc3RvciA9IHBhcmVudCgpOworICAgIHdoaWxlIChw
b3NpdGlvbmVkQW5jZXN0b3IgJiYgIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3NpdGlvbmVkQW5j
ZXN0b3IpICYmICFwb3NpdGlvbmVkQW5jZXN0b3ItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAg
ICAgIHBvc2l0aW9uZWRBbmNlc3RvciA9IHBvc2l0aW9uZWRBbmNlc3Rvci0+cGFyZW50KCk7Cisg
ICAgaWYgKHBvc2l0aW9uZWRBbmNlc3RvciAmJiAoIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3Np
dGlvbmVkQW5jZXN0b3IpIHx8IHBvc2l0aW9uZWRBbmNlc3Rvci0+aXNTdGFja2luZ0NvbnRleHQo
KSkpCisgICAgICAgIHBvc2l0aW9uZWRBbmNlc3RvciA9IDA7CisKKyAgICAvLyBJbnNlcnQgdGhp
cyBpbnRvIHRoZSBwb3NaT3JkZXJpc3RCZWZvcmVQcm9tb3RlIGRpcmVjdGx5IGFmdGVyIHRoZQor
ICAgIC8vIHBvc2l0aW9uZWQgYW5jZXN0b3IsIGlmIHRoZXJlIGlzIG9uZS4gT3RoZXJ3aXNlLCBh
ZGQgaXQgdG8gdGhlIHZlcnkKKyAgICAvLyBiZWdpbm5pbmcuCisgICAgLy8KKyAgICAvLyBUaGUg
Y3VycmVudCBsYXllciB3aWxsIGFwcGVhciBpbiB0aGUgei1vcmRlciBsaXN0cyBhZnRlciBwcm9t
b3Rpb24sIHNvCisgICAgLy8gZm9yIGEgbWVhbmluZ2Z1bCBjb21wYXJpc29uLCB3ZSBtdXN0IGlu
c2VydCBpdCBpbiB0aGUgei1vcmRlciBsaXN0cworICAgIC8vIGJlZm9yZSBwcm9tb3Rpb24gaWYg
aXQgZG9lcyBub3QgYXBwZWFyIHRoZXJlIGFscmVhZHkuCisgICAgaWYgKCFyZW5kZXJlcigpLT5p
c1Bvc2l0aW9uZWQoKSkgeworICAgICAgICBpZiAoIXBvc2l0aW9uZWRBbmNlc3RvcikgeworICAg
ICAgICAgICAgaWYgKCFwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSkKKyAgICAgICAgICAgICAg
ICBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVuZGVy
TGF5ZXIqPigpKTsKKworICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPnBy
ZXBlbmQodGhpcyk7CisgICAgICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUr
KzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGU7IGluZGV4KyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAocG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPmF0KGluZGV4KSA9PSBw
b3NpdGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJl
Zm9yZVByb21vdGUtPmluc2VydChpbmRleCArIDEsIHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUrKzsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKCFpc1N0YWNraW5nQ29udGV4dCgpKSB7Ci0gICAgICAgIGJvb2wgbmV3VmFs
dWUgPSBtYXhJbmRleCAtIG1pbkluZGV4ID09IGNvdW50OworICAgIHNpemVfdCBzaXplQmVmb3Jl
UHJvbW90ZSA9IHBvc1pPcmRlckxpc3RTaXplQmVmb3JlUHJvbW90ZSArIG5lZ1pPcmRlckxpc3RT
aXplQmVmb3JlUHJvbW90ZTsKKyAgICBzaXplX3Qgc2l6ZUFmdGVyUHJvbW90ZSA9IHBvc1pPcmRl
ckxpc3RTaXplQWZ0ZXJQcm9tb3RlICsgbmVnWk9yZGVyTGlzdFNpemVBZnRlclByb21vdGU7CisK
KyAgICBib29sIGNhblByb21vdGUgPSBjb21wYXJlTGF5ZXJMaXN0c0JlZm9yZUFuZEFmdGVyUHJv
bW90ZSh0aGlzLCBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZS5nZXQoKSwgbmVnWk9yZGVyTGlz
dEJlZm9yZVByb21vdGUuZ2V0KCksCisgICAgICAgIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUu
Z2V0KCksIG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGUuZ2V0KCksCisgICAgICAgIHNpemVCZWZv
cmVQcm9tb3RlLCBzaXplQWZ0ZXJQcm9tb3RlLCBGcm9tQmFja2dyb3VuZCkKKyAgICAgICAgJiYg
Y29tcGFyZUxheWVyTGlzdHNCZWZvcmVBbmRBZnRlclByb21vdGUodGhpcywgcG9zWk9yZGVyTGlz
dEJlZm9yZVByb21vdGUuZ2V0KCksIG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLmdldCgpLAor
ICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEFmdGVyUHJvbW90ZS5nZXQoKSwgbmVnWk9yZGVyTGlz
dEFmdGVyUHJvbW90ZS5nZXQoKSwKKyAgICAgICAgICAgIHNpemVCZWZvcmVQcm9tb3RlLCBzaXpl
QWZ0ZXJQcm9tb3RlLCBGcm9tRm9yZWdyb3VuZCk7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgICAgIGJvb2wgZGlkVXBkYXRlID0gbmV3VmFsdWUgIT0gbV9kZXNjZW5k
YW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXI7CisgICAgYm9vbCBkaWRVcGRhdGUgPSAo
Y2FuUHJvbW90ZSAhPSBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVyKTsKICNlbmRp
ZgotICAgICAgICBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlciA9IG5l
d1ZhbHVlOworCisgICAgbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ0NvbnRhaW5lciA9IGNhblBy
b21vdGU7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGlmIChk
aWRVcGRhdGUpCi0gICAgICAgICAgICB1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
KyAgICBpZiAoZGlkVXBkYXRlKQorICAgICAgICB1cGRhdGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKICNlbmRpZgorfQorCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDYW5CZVN0YWNraW5n
Q29udGFpbmVyUmVjdXJzaXZlbHkoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0
KQoreworICAgIGlmICh0aGlzICE9IGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0KSB7CisgICAgICAg
IGlmIChpc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIoYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpOwog
ICAgIH0KKworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUNh
bkJlU3RhY2tpbmdDb250YWluZXJSZWN1cnNpdmVseShhbmNlc3RvclN0YWNraW5nQ29udGV4dCk7
CiB9CiAKKwogdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVJlcGFpbnRSZWN0cyhjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRy
eU1hcCogZ2VvbWV0cnlNYXApCiB7CiAgICAgQVNTRVJUKCFtX3Zpc2libGVDb250ZW50U3RhdHVz
RGlydHkpOwpAQCAtMTAwMyw3ICsxMTEwLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6Y2FuQmVTdGFj
a2luZ0NvbnRhaW5lcigpIGNvbnN0CiAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkgfHwgIXN0
YWNraW5nQ29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1f
ZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyOworICAgIHJldHVybiBtX2Nh
bkJlUHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVyOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpz
ZXRIYXNWaXNpYmxlQ29udGVudCgpCkBAIC0xMzIwLDEyICsxNDI3LDYgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpzdGFja2luZ0NvbnRhaW5lcigpIGNvbnN0CiAgICAgcmV0dXJuIGxheWVy
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxh
eWVyKiBsYXllcikKLXsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBsYXllclJlbmRlcmVy
ID0gbGF5ZXItPnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIGxheWVyLT5pc1Jvb3RMYXllcigpIHx8
IGxheWVyUmVuZGVyZXItPmlzUG9zaXRpb25lZCgpIHx8IGxheWVyLT5oYXNUcmFuc2Zvcm0oKTsK
LX0KLQogc3RhdGljIGlubGluZSBib29sIGlzRml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRl
ckxheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXItPmlzUm9vdExheWVyKCkgfHwgbGF5
ZXItPmhhc1RyYW5zZm9ybSgpOwpAQCAtMTk5Niw2ICsyMDk3LDE5IEBAIGJvb2wgUmVuZGVyTGF5
ZXI6Om5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fbmVlZHND
b21wb3NpdGVkU2Nyb2xsaW5nOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVJc05vcm1h
bEZsb3dPbmx5KCkKK3sKKyAgICBib29sIGlzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1h
bEZsb3dPbmx5KCk7CisgICAgaWYgKGlzTm9ybWFsRmxvd09ubHkgIT0gbV9pc05vcm1hbEZsb3dP
bmx5KSB7CisgICAgICAgIG1faXNOb3JtYWxGbG93T25seSA9IGlzTm9ybWFsRmxvd09ubHk7Cisg
ICAgICAgIFJlbmRlckxheWVyKiBwID0gcGFyZW50KCk7CisgICAgICAgIGlmIChwKQorICAgICAg
ICAgICAgcC0+ZGlydHlOb3JtYWxGbG93TGlzdCgpOworICAgICAgICBkaXJ0eVN0YWNraW5nQ29u
dGFpbmVyWk9yZGVyTGlzdHMoKTsKKyAgICB9Cit9CisKKwogdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKCkKIHsKICAgICBib29sIG9sZE5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZyA9IG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOwpAQCAtMjAxNiw2ICsy
MTMwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkKICAgICB9CiAKICAgICBpZiAob2xkTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nICE9IG1fbmVl
ZHNDb21wb3NpdGVkU2Nyb2xsaW5nKSB7CisgICAgICAgIHVwZGF0ZUlzTm9ybWFsRmxvd09ubHko
KTsKICAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGlzU3Rh
Y2tpbmdDb250YWluZXIoKSkKICAgICAgICAgICAgIGRpcnR5Wk9yZGVyTGlzdHMoKTsKQEAgLTU3
MTksNyArNTgzNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMoYm9vbCBpbmNs
dWRlSGlkZGVuTGF5ZXJzLCBDb2xsZWN0TGF5ZXJzQmVoYXZpb3IKIAogdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCkKIHsKLSAgICBib29sIHNob3VsZFVwZGF0ZURl
c2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlciA9IGlzU3RhY2tpbmdDb250ZXh0
KCkgJiYgKG1fek9yZGVyTGlzdHNEaXJ0eSB8fCBtX25vcm1hbEZsb3dMaXN0RGlydHkpOworICAg
IGJvb2wgc2hvdWxkVXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lciA9IGFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSAmJiBpc1N0YWNraW5nQ29udGV4dCgp
ICYmIChtX3pPcmRlckxpc3RzRGlydHkgfHwgbV9ub3JtYWxGbG93TGlzdERpcnR5KTsKICAgICB1
cGRhdGVaT3JkZXJMaXN0cygpOwogICAgIHVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CiAKQEAgLTU3
MjgsOCArNTg0MywxMSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllckxpc3RzSWZOZWVk
ZWQoKQogICAgICAgICByZWZsZWN0aW9uTGF5ZXItPnVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CiAg
ICAgfQogCi0gICAgaWYgKHNob3VsZFVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3Rh
Y2tpbmdPcmRlcikgewotICAgICAgICB1cGRhdGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0
YWNraW5nT3JkZXIoKTsKKyAgICBpZiAoc2hvdWxkVXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5l
cikgeworICAgICAgICAvLyBjYWxsIFVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIgZm9yIGFs
bCBkZXNjZW5kYW50cywKKyAgICAgICAgLy8gcGFzc2luZyBzZWxmIGluIGFzIGFuY2VzdG9yIHN0
YWNraW5nIGNvbnRleHQuCisgICAgICAgIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXJSZWN1
cnNpdmVseSh0aGlzKTsKKwogICAgICAgICAvLyBUaGUgYWJvdmUgZnVuY3Rpb24gY2FuIGNhdXNl
IHVzIHRvIHVwZGF0ZSBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZwogICAgICAgICAvLyBhbmQg
ZGlydHkgb3VyIGxheWVyIGxpc3RzLiBSZWZyZXNoIHRoZW0gaWYgbmVjZXNzYXJ5LgogICAgICAg
ICB1cGRhdGVaT3JkZXJMaXN0cygpOwpAQCAtNTkxNiw3ICs2MDM0LDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFMKICAgICBib29sIGlzU3RhY2tpbmdDb250ZXh0ID0gdGhpcy0+aXNTdGFja2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQgIT0gd2FzU3RhY2tpbmdDb250
ZXh0KSB7CiAgICAgICAgIGRpcnR5U3RhY2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygpOwotICAg
ICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQpCisgICAgICAgIGlmIChpc1N0YWNraW5nQ29udGFp
bmVyKCkpCiAgICAgICAgICAgICBkaXJ0eVpPcmRlckxpc3RzKCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNsZWFyWk9yZGVyTGlzdHMoKTsKQEAgLTU5MjcsNyArNjA0NSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVN0YWNraW5nQ29udGV4dHNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRo
ZSByZXN0LgogICAgIGlmIChvbGRTdHlsZS0+ekluZGV4KCkgIT0gcmVuZGVyZXIoKS0+c3R5bGUo
KS0+ekluZGV4KCkgfHwgb2xkU3R5bGUtPnZpc2liaWxpdHkoKSAhPSByZW5kZXJlcigpLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkpIHsKICAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRl
ckxpc3RzKCk7Ci0gICAgICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCkKKyAgICAgICAgaWYgKGlz
U3RhY2tpbmdDb250YWluZXIoKSkKICAgICAgICAgICAgIGRpcnR5Wk9yZGVyTGlzdHMoKTsKICAg
ICB9CiB9CkBAIC02MDE2LDE0ICs2MTM0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlT3V0
T2ZGbG93UG9zaXRpb25lZChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiAKIHZvaWQgUmVu
ZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkKIHsKLSAgICBib29sIGlzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1h
bEZsb3dPbmx5KCk7Ci0gICAgaWYgKGlzTm9ybWFsRmxvd09ubHkgIT0gbV9pc05vcm1hbEZsb3dP
bmx5KSB7Ci0gICAgICAgIG1faXNOb3JtYWxGbG93T25seSA9IGlzTm9ybWFsRmxvd09ubHk7Ci0g
ICAgICAgIFJlbmRlckxheWVyKiBwID0gcGFyZW50KCk7Ci0gICAgICAgIGlmIChwKQotICAgICAg
ICAgICAgcC0+ZGlydHlOb3JtYWxGbG93TGlzdCgpOwotICAgICAgICBkaXJ0eVN0YWNraW5nQ29u
dGFpbmVyWk9yZGVyTGlzdHMoKTsKLSAgICB9CisgICAgdXBkYXRlSXNOb3JtYWxGbG93T25seSgp
OwogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9NQVJRVUVF
ICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1ZWVCZWhhdmlvcigpICE9IE1OT05FICYmIHJl
bmRlcmVyKCktPmlzQm94KCkpIHsKICAgICAgICAgaWYgKCFtX21hcnF1ZWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGNjYjY1OGVjZWU2MmQ0OTgwY2M3NjA2ZWQ0
ZThjYWMxNWQyMzNkMDAuLjkwZjMzNjEyNGFjMjBlNDE1OTdhZWExM2RjMzU2ZmZlZWJmOWE1OGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC04NjEsOCArODYxLDE0
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNTZWxmUGFpbnRpbmdM
YXllckRlc2NlbmRhbnRTdGF0dXMoKTsKIAogICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlRGVzY2Vu
ZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyKCk7Ci0gICAgdm9pZCB1cGRhdGVEZXNj
ZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUoY29uc3QgSGFzaE1h
cDxjb25zdCBSZW5kZXJMYXllciosIGludD4mLCBpbnQmIG1pbkluZGV4LCBpbnQmIG1heEluZGV4
LCBpbnQmIGNvdW50LCBib29sIGZpcnN0SXRlcmF0aW9uKTsKKworICAgIHZvaWQgY29sbGVjdEJl
Zm9yZUFmdGVyUHJvbW90aW9uWk9yZGVyTGlzdHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yU3RhY2tp
bmdDb250ZXh0LAorICAgICAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiYgcG9zWk9y
ZGVyTGlzdEJlZm9yZVByb21vdGUsCisgICAgICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIq
PiA+JiBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwKKyAgICAgICAgT3duUHRyPFZlY3RvcjxS
ZW5kZXJMYXllcio+ID4mIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUsCisgICAgICAgIE93blB0
cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlKTsKKyAg
ICB2b2lkIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIoUmVuZGVyTGF5ZXIqKTsKKyAgICB2
b2lkIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXJSZWN1cnNpdmVseShSZW5kZXJMYXllciop
OwogCiAgICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiA9IDApOwog
ICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0c0luY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CkBAIC04
ODQsNiArODkwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhhc091
dE9mRmxvd1Bvc2l0aW9uZWREZXNjZW5kYW50U3RhdHVzKCk7CiAgICAgdm9pZCB1cGRhdGVPdXRP
ZkZsb3dQb3NpdGlvbmVkKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKKyAgICB2b2lk
IHVwZGF0ZUlzTm9ybWFsRmxvd09ubHkoKTsKICAgICB2b2lkIHVwZGF0ZU5lZWRzQ29tcG9zaXRl
ZFNjcm9sbGluZygpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjaGFu
Z2VkLgpAQCAtMTE2Myw3ICsxMTcwLDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIElmIHRoaXMgaXMg
dHJ1ZSwgdGhlbiBubyBub24tZGVzY2VuZGFudCBhcHBlYXJzIGJldHdlZW4gYW55IG9mIG91cgog
ICAgIC8vIGRlc2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLiBUaGlzIGlzIG9uZSBvZiB0aGUg
cmVxdWlyZW1lbnRzIG9mIGJlaW5nCiAgICAgLy8gYWJsZSB0byBzYWZlbHkgYmVjb21lIGEgc3Rh
Y2tpbmcgY29udGV4dC4KLSAgICBib29sIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFj
a2luZ09yZGVyIDogMTsKKyAgICBib29sIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWlu
ZXIgOiAxOwogCiAgICAgY29uc3QgYm9vbCBtX2lzUm9vdExheWVyIDogMTsKIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY5
OWUxMDFlNTY1ZDM2NGE4Yjc5NWVlZDQ2OTM5YjdkYmI2MjliNzguLjQ1ZjkxNTliZGEzMWY1MDc4
MDgxZDhiODhlZmViM2YwY2MyZjJiNWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMy0wMy0w
NiAgR2xlbm4gSGFydG1hbm4gIDxoYXJ0bWFubmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNp
bXBsaWZ5IGxvZ2ljIGZvciBhdXRvbWF0aWNhbGx5IG9wdGluZyBpbnRvIGNvbXBvc2l0ZWQgc2Ny
b2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDkzMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
ZSBzaW1wbGlmeSB0aGUgbG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9z
aXRlZAorICAgICAgICBzY3JvbGxpbmcgYnkgZ2VuZXJhdGluZyB0d28gc2V0cyBvZiB6LW9yZGVy
IGxpc3RzLCBmaXJzdCBmb3JjaW5nIGEKKyAgICAgICAgbGF5ZXIgdG8gbm90IHByb21vdGUsIHRo
ZW4gZm9yY2luZyBpdCB0byBwcm9tb3RlIHRoZSBzZWNvbmQgdGltZS4gVGhlCisgICAgICAgIHR3
byBzZXRzIG9mIGxpc3RzIGNhbiBiZSByZWxhdGl2ZWx5IGVhc2lseSBjb21wYXJlZCBmb3IgYW55
IHBvc3NpYmxlCisgICAgICAgIGNoYW5nZSBpbiBzdGFja2luZyBvcmRlci4gSWYgdGhlIHR3byBs
aXN0cyBhcmUgaW4gZmFjdCB0aGUgc2FtZSwgdGhlbgorICAgICAgICB3ZSBrbm93IGl0IGlzIHNh
ZmUgdG8gcHJvbW90ZSB0aGUgbGF5ZXIgdG8gYmUgYSBzdGFja2luZyBjb250YWluZXIuIFRoaXMK
KyAgICAgICAgc2hvdWxkIGJlIG1vcmUgaW50dWl0aXZlIGFuZCBtb3JlIHJvYnVzdCB0aGFuIHRo
ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZs
b3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50
by1jb21wb3NpdGVkLXNjcm9sbGluZy5odG1sOgorICAgICAgICAqIGNvbXBvc2l0aW5nL292ZXJm
bG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50
by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDMt
MDYgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogVXBkYXRlIG9wZW4gcmVzb3VyY2UgZGlhbG9nIHdoZW4gbmV3IHVpU291cmNl
Q29kZXMgYXJlIGxvYWRlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292
ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1v
cHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQKaW5kZXggZGVlZjUxNTAy
Yjc5ZGQwNGRhNDc4ZDUxZWYwMjQ5NzE4YTY0OTI3OC4uOGIxMzc4OTE3OTFmZTk2OTI3YWQ3OGU2
NGIwYWFkN2JkZWQwOGJkYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3Zl
cmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxs
eS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1leHBlY3RlZC50eHQKQEAgLTEsMTI3ICsx
IEBACi1JdGVyYXRpb24gMDogUGFzc2VkCi1JdGVyYXRpb24gMCwgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDE6IFBhc3NlZAotSXRlcmF0aW9uIDEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyOiBQYXNz
ZWQKLUl0ZXJhdGlvbiAyLCBsYXllciB0cmVlCi1JdGVyYXRpb24gMzogUGFzc2VkCi1JdGVyYXRp
b24gMywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ6IFBhc3NlZAotSXRlcmF0aW9uIDQsIGxheWVy
IHRyZWUKLUl0ZXJhdGlvbiA1OiBQYXNzZWQKLUl0ZXJhdGlvbiA1LCBsYXllciB0cmVlCi1JdGVy
YXRpb24gNjogUGFzc2VkCi1JdGVyYXRpb24gNiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDc6IFBh
c3NlZAotSXRlcmF0aW9uIDcsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA4OiBQYXNzZWQKLUl0ZXJh
dGlvbiA4LCBubyBsYXllciB0cmVlCi1JdGVyYXRpb24gOTogUGFzc2VkCi1JdGVyYXRpb24gOSwg
bm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDEwOiBQYXNzZWQKLUl0ZXJhdGlvbiAxMCwgbGF5ZXIg
dHJlZQotSXRlcmF0aW9uIDExOiBQYXNzZWQKLUl0ZXJhdGlvbiAxMSwgbGF5ZXIgdHJlZQotSXRl
cmF0aW9uIDEyOiBQYXNzZWQKLUl0ZXJhdGlvbiAxMiwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9u
IDEzOiBQYXNzZWQKLUl0ZXJhdGlvbiAxMywgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE0OiBQ
YXNzZWQKLUl0ZXJhdGlvbiAxNCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE1OiBQYXNzZWQK
LUl0ZXJhdGlvbiAxNSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE2OiBQYXNzZWQKLUl0ZXJh
dGlvbiAxNiwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE3OiBQYXNzZWQKLUl0ZXJhdGlvbiAx
Nywgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE4OiBQYXNzZWQKLUl0ZXJhdGlvbiAxOCwgbm8g
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDE5OiBQYXNzZWQKLUl0ZXJhdGlvbiAxOSwgbm8gbGF5ZXIg
dHJlZQotSXRlcmF0aW9uIDIwOiBQYXNzZWQKLUl0ZXJhdGlvbiAyMCwgbGF5ZXIgdHJlZQotSXRl
cmF0aW9uIDIxOiBQYXNzZWQKLUl0ZXJhdGlvbiAyMSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDIy
OiBQYXNzZWQKLUl0ZXJhdGlvbiAyMiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDIzOiBQYXNzZWQK
LUl0ZXJhdGlvbiAyMywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI0OiBQYXNzZWQKLUl0ZXJhdGlv
biAyNCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI1OiBQYXNzZWQKLUl0ZXJhdGlvbiAyNSwgbGF5
ZXIgdHJlZQotSXRlcmF0aW9uIDI2OiBQYXNzZWQKLUl0ZXJhdGlvbiAyNiwgbGF5ZXIgdHJlZQot
SXRlcmF0aW9uIDI3OiBQYXNzZWQKLUl0ZXJhdGlvbiAyNywgbGF5ZXIgdHJlZQotSXRlcmF0aW9u
IDI4OiBQYXNzZWQKLUl0ZXJhdGlvbiAyOCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDI5OiBQYXNz
ZWQKLUl0ZXJhdGlvbiAyOSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDMwOiBQYXNzZWQKLUl0ZXJh
dGlvbiAzMCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDMxOiBQYXNzZWQKLUl0ZXJhdGlvbiAzMSwg
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDMyOiBQYXNzZWQKLUl0ZXJhdGlvbiAzMiwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDMzOiBQYXNzZWQKLUl0ZXJhdGlvbiAzMywgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDM0OiBQYXNzZWQKLUl0ZXJhdGlvbiAzNCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM1
OiBQYXNzZWQKLUl0ZXJhdGlvbiAzNSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM2OiBQYXNz
ZWQKLUl0ZXJhdGlvbiAzNiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM3OiBQYXNzZWQKLUl0ZXJh
dGlvbiAzNywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM4OiBQYXNzZWQKLUl0ZXJhdGlvbiAzOCwg
bm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDM5OiBQYXNzZWQKLUl0ZXJhdGlvbiAzOSwgbm8gbGF5
ZXIgdHJlZQotSXRlcmF0aW9uIDQwOiBQYXNzZWQKLUl0ZXJhdGlvbiA0MCwgbGF5ZXIgdHJlZQot
SXRlcmF0aW9uIDQxOiBQYXNzZWQKLUl0ZXJhdGlvbiA0MSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9u
IDQyOiBQYXNzZWQKLUl0ZXJhdGlvbiA0MiwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQzOiBQYXNz
ZWQKLUl0ZXJhdGlvbiA0MywgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ0OiBQYXNzZWQKLUl0ZXJh
dGlvbiA0NCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ1OiBQYXNzZWQKLUl0ZXJhdGlvbiA0NSwg
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ2OiBQYXNzZWQKLUl0ZXJhdGlvbiA0NiwgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDQ3OiBQYXNzZWQKLUl0ZXJhdGlvbiA0NywgbGF5ZXIgdHJlZQotSXRlcmF0
aW9uIDQ4OiBQYXNzZWQKLUl0ZXJhdGlvbiA0OCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDQ5
OiBQYXNzZWQKLUl0ZXJhdGlvbiA0OSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDUwOiBQYXNz
ZWQKLUl0ZXJhdGlvbiA1MCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDUxOiBQYXNzZWQKLUl0ZXJh
dGlvbiA1MSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDUyOiBQYXNzZWQKLUl0ZXJhdGlvbiA1Miwg
bGF5ZXIgdHJlZQotSXRlcmF0aW9uIDUzOiBQYXNzZWQKLUl0ZXJhdGlvbiA1MywgbGF5ZXIgdHJl
ZQotSXRlcmF0aW9uIDU0OiBQYXNzZWQKLUl0ZXJhdGlvbiA1NCwgbm8gbGF5ZXIgdHJlZQotSXRl
cmF0aW9uIDU1OiBQYXNzZWQKLUl0ZXJhdGlvbiA1NSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9u
IDU2OiBQYXNzZWQKLUl0ZXJhdGlvbiA1Niwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU3OiBQ
YXNzZWQKLUl0ZXJhdGlvbiA1Nywgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU4OiBQYXNzZWQK
LUl0ZXJhdGlvbiA1OCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDU5OiBQYXNzZWQKLUl0ZXJh
dGlvbiA1OSwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDYwOiBQYXNzZWQKLUl0ZXJhdGlvbiA2
MCwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDYxOiBQYXNzZWQKLUl0ZXJhdGlvbiA2MSwgbm8gbGF5
ZXIgdHJlZQotSXRlcmF0aW9uIDYyOiBQYXNzZWQKLUl0ZXJhdGlvbiA2MiwgbGF5ZXIgdHJlZQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNh
bGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9jb21w
b3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xs
aW5nLmh0bWwKaW5kZXggMWU2N2I1ZGQ3OGZiNzExYmJlMTRjMTY2MTg4MzJlNjExZGFmYWY0MC4u
YzAyMjZiODA4N2RiNzliZmUxNTI0NzE0ODhlMDlkZjQ3ZTkxNWFmNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21w
b3NpdGVkLXNjcm9sbGluZy5odG1sCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJm
bG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbApAQCAt
MTIsMTIgKzEyLDE0IEBACiAgICAgICBvdmVyZmxvdzogc2Nyb2xsOwogICAgICAgbWFyZ2luOiAy
MHB4OwogICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiAjMDBGRkZGOwogICAgIH0KIAogICAgIC5zY3JvbGxlZCB7CiAgICAgICB3aWR0aDogMTgw
cHg7Ci0gICAgICBoZWlnaHQ6IDkwcHg7CisgICAgICBoZWlnaHQ6IDMwcHg7CiAgICAgICBtYXJn
aW46IDEwcHg7CisgICAgICB0b3A6IDcwcHg7CiAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5
OwogICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgIH0KQEAgLTI1LDI1ICsyNywzMiBAQAog
ICAgIC5wb3NpdGlvbmVkIHsKICAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgIGhlaWdodDogMjQw
cHg7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKICAgICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKICAgICB9CiAKKyAgICAjc2Vjb25kQ2hpbGQgeworICAgICAgYmFja2dyb3VuZC1jb2xv
cjogI0NDOTk5OTsKKyAgICAgIHRvcDogNTBweDsKKyAgICB9CisKICAgICAjcHJlZGVjZXNzb3Ig
ewogICAgICAgbGVmdDogMjBweDsKICAgICAgIHRvcDogMjBweDsKKyAgICAgIGJhY2tncm91bmQt
Y29sb3I6ICM5OTAwNjY7CiAgICAgfQogCiAgICAgI3N1Y2Nlc3NvciB7Ci0gICAgICBsZWZ0OiAx
NjBweDsKKyAgICAgIGxlZnQ6IDIwcHg7CiAgICAgICB0b3A6IDIwcHg7CisgICAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjMDAwMDY2OwogICAgIH0KIAotICAgICNkZXNjZW5kYW50IHsKLSAgICAgIGxl
ZnQ6IDkwcHg7Ci0gICAgICB0b3A6IDIwcHg7Ci0gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVl
OwotICAgICAgei1pbmRleDogLTIwOworICAgICNub3JtYWxGbG93IHsKKyAgICAgIHdpZHRoOiAx
ODBweDsKKyAgICAgIGhlaWdodDogMzBweDsKKyAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgIHRv
cDogLTIwcHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CiAgICAgfQogICA8L3N0
eWxlPgogICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgpA
QCAtNTIsOSArNjEsNiBAQAogICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKICAgICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOwogCi0gICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgICB3
aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVy
Zmxvd1Njcm9sbEVuYWJsZWQodHJ1ZSk7Ci0KICAgICBmdW5jdGlvbiB3cml0ZShzdHIpCiAgICAg
ewogICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CkBA
IC02MiwxNjkgKzY4LDE5NSBAQAogICAgICAgcHJlLmFwcGVuZENoaWxkKHRleHQpOwogICAgIH0K
IAotICAgIHZhciBpdGVyYXRpb24gPSAwOwotICAgIGZ1bmN0aW9uIHByaW50UmVzdWx0KGV4cGVj
dGVkUmVzdWx0KQorICAgIGZ1bmN0aW9uIGRpZE9wdEluKCkKKyAgICB7CisgICAgICAvLyBGb3Jj
ZSBhIHN0eWxlIHJlY2FsYy4KKyAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAg
ICAvLyBGb3JjZSBhIGxheW91dC4KKyAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdCb3go
Y29udGFpbmVyKTsKKyAgICAgIHZhciBsYXllclRyZWUgPSB3aW5kb3cuaW50ZXJuYWxzLmxheWVy
VHJlZUFzVGV4dChkb2N1bWVudCk7CisKKyAgICAgIGlmIChkZWJ1Z01vZGUpCisgICAgICAgICAg
d3JpdGUobGF5ZXJUcmVlKTsKKworICAgICAgcmV0dXJuICEhbGF5ZXJUcmVlOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGdldFN0YWNraW5nT3JkZXIoKQogICAgIHsKKyAgICAgIHZhciBkaXZFbGVt
ZW50cyA9IFtdOwogICAgICAgLy8gRm9yY2UgYSBzdHlsZSByZWNhbGMuCiAgICAgICBkb2N1bWVu
dC5ib2R5Lm9mZnNldFRvcDsKIAotICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKLSAgICAg
ICAgLy8gRm9yY2UgYSBsYXlvdXQuCi0gICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdC
b3goY29udGFpbmVyKTsKLSAgICAgICAgdmFyIGxheWVyVHJlZSA9IHdpbmRvdy5pbnRlcm5hbHMu
bGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50KTsKLQotICAgICAgICBpZiAoIWxheWVyVHJlZSA9PSAh
ZXhwZWN0ZWRSZXN1bHQpCi0gICAgICAgICAgd3JpdGUoJ0l0ZXJhdGlvbiAnICsgaXRlcmF0aW9u
LnRvU3RyaW5nKCkgKyAnOiBQYXNzZWQnKQotICAgICAgICBlbHNlCi0gICAgICAgICAgd3JpdGUo
J0l0ZXJhdGlvbiAnICsgaXRlcmF0aW9uLnRvU3RyaW5nKCkgKyAnOiBGQUlMRUQnKQotCi0gICAg
ICAgIGlmIChsYXllclRyZWUpIHsKLSAgICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVy
YXRpb24udG9TdHJpbmcoKSArICcsIGxheWVyIHRyZWUnKTsKLSAgICAgICAgICBpZiAoZGVidWdN
b2RlKQotICAgICAgICAgICAgICB3cml0ZShsYXllclRyZWUpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICB3cml0ZSgnSXRlcmF0aW9uICcgKyBpdGVyYXRpb24udG9TdHJpbmcoKSArICcsIG5v
IGxheWVyIHRyZWUnKTsKKyAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgd2luZG93Lmlu
dGVybmFscy5ib3VuZGluZ0JveChjb250YWluZXIpOworCisgICAgICB2YXIgZXJyb3JDb2RlID0g
MDsKKyAgICAgIHZhciBzdGFja2luZ09yZGVyID0gd2luZG93LmludGVybmFscy5ub2Rlc0Zyb21S
ZWN0KGRvY3VtZW50LCAxMDAsIDc1LCAyMDAsIDIwMCwgMjAwLCAyMDAsIGZhbHNlLCBmYWxzZSwg
ZXJyb3JDb2RlKTsKKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFja2luZ09yZGVyLmxl
bmd0aDsgKytpKSB7CisgICAgICAgIGlmIChzdGFja2luZ09yZGVyW2ldLm5vZGVOYW1lID09PSAi
RElWIikgeworICAgICAgICAgIGRpdkVsZW1lbnRzLnB1c2goc3RhY2tpbmdPcmRlcltpXSk7Cisg
ICAgICAgIH0KICAgICAgIH0KLSAgICAgIGl0ZXJhdGlvbisrOworCisgICAgICByZXR1cm4gZGl2
RWxlbWVudHM7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gZG9UZXN0KCkKICAgICB7CisgICAgICB2
YXIgYW5jZXN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5jZXN0b3InKTsKICAgICAg
IHZhciBwcmVkZWNlc3NvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVkZWNlc3Nvcicp
OwogICAgICAgdmFyIHN1Y2Nlc3NvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWNjZXNz
b3InKTsKICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
dGFpbmVyJyk7CiAgICAgICB2YXIgZmlyc3RDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdmaXJzdENoaWxkJyk7CiAgICAgICB2YXIgc2Vjb25kQ2hpbGQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc2Vjb25kQ2hpbGQnKTsKLSAgICAgIHZhciBkZXNjZW5kYW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2Rlc2NlbmRhbnQnKTsKICAgICAgIHZhciBjb3VudCA9IDA7CiAKLSAg
ICAgIGRlc2NlbmRhbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLQotICAgICAgLy8gZGVzY2Vu
ZGFudHMgaW4gc3RhY2tpbmcgb3JkZXIuCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7
Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCA1OyArK2opIHsKLSAgICAgICAgICBmb3IgKGsgPSAw
OyBrIDwgMjsgKytrKSB7Ci0gICAgICAgICAgICBmb3IgKGwgPSAwOyBsIDwgMjsgKytsKSB7Ci0g
ICAgICAgICAgICAgIHZhciBtaW5aSW5kZXggPSAwOwotICAgICAgICAgICAgICB2YXIgbWF4Wklu
ZGV4ID0gMDsKLSAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgICAgICAgIGZp
cnN0Q2hpbGQuc3R5bGUuekluZGV4ID0gJzEnOwotICAgICAgICAgICAgICAgIHNlY29uZENoaWxk
LnN0eWxlLnpJbmRleCA9ICczJzsKLSAgICAgICAgICAgICAgICBtYXhaSW5kZXggPSAzOwotICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gMSkgewotICAgICAgICAgICAgICAgIGZpcnN0Q2hp
bGQuc3R5bGUuekluZGV4ID0gJy0xJzsKLSAgICAgICAgICAgICAgICBzZWNvbmRDaGlsZC5zdHls
ZS56SW5kZXggPSAnLTMnOwotICAgICAgICAgICAgICAgIG1pblpJbmRleCA9IC0zOwotICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQuc3R5bGUuekluZGV4
ID0gJy0xJzsKLSAgICAgICAgICAgICAgICBzZWNvbmRDaGlsZC5zdHlsZS56SW5kZXggPSAnMyc7
Ci0gICAgICAgICAgICAgICAgbWluWkluZGV4ID0gLTE7Ci0gICAgICAgICAgICAgICAgbWF4Wklu
ZGV4ID0gMzsKLSAgICAgICAgICAgICAgfQorICAgICAgZm9yICh2YXIgc2libGluZ1Nob3VsZEJl
WmVyb0lmUHJlY2VkZXNDb250YWluZXIgPSAwOyBzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRl
c0NvbnRhaW5lciA8PSAxOyArK3NpYmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVy
KSB7CisgICAgICAgIGZvciAodmFyIGNvbnRhaW5lcklzUG9zaXRpb25lZCA9IDA7IGNvbnRhaW5l
cklzUG9zaXRpb25lZCA8PSAxOyArK2NvbnRhaW5lcklzUG9zaXRpb25lZCkgeworICAgICAgICAg
IGZvciAodmFyIHNpYmxpbmdJc1N1Y2Nlc3NvciA9IDA7IHNpYmxpbmdJc1N1Y2Nlc3NvciA8PSAx
OyArK3NpYmxpbmdJc1N1Y2Nlc3NvcikgeworICAgICAgICAgICAgZm9yICh2YXIgaGFzUG9zaXRp
b25lZEFuY2VzdG9yID0gMDsgaGFzUG9zaXRpb25lZEFuY2VzdG9yIDw9IDE7ICsraGFzUG9zaXRp
b25lZEFuY2VzdG9yKSB7CisgICAgICAgICAgICAgIHZhciBpbmRpY2VzID0gWyAwLCAxLCAyLCAz
IF07CisgICAgICAgICAgICAgIGZvciAodmFyIHNpYmxpbmdJbmRleCA9IDA7IHNpYmxpbmdJbmRl
eCA8IDQ7ICsrc2libGluZ0luZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIHNpYmxpbmdJbmRp
Y2VzID0gaW5kaWNlcy5zbGljZSgwKTsKKyAgICAgICAgICAgICAgICBzaWJsaW5nSW5kaWNlcy5z
cGxpY2Uoc2libGluZ0luZGV4LCAxKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBjb250YWlu
ZXJTdWJpbmRleCA9IDA7IGNvbnRhaW5lclN1YmluZGV4IDwgMzsgKytjb250YWluZXJTdWJpbmRl
eCkgeworICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckluZGljZXMgPSBzaWJsaW5nSW5k
aWNlcy5zbGljZSgwKTsKKyAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJJbmRleCA9IGNv
bnRhaW5lckluZGljZXNbY29udGFpbmVyU3ViaW5kZXhdOworICAgICAgICAgICAgICAgICAgY29u
dGFpbmVySW5kaWNlcy5zcGxpY2UoY29udGFpbmVyU3ViaW5kZXgsIDEpOworICAgICAgICAgICAg
ICAgICAgdmFyIGZpcnN0Q2hpbGRJbmRleCA9IGNvbnRhaW5lckluZGljZXNbMF07CisgICAgICAg
ICAgICAgICAgICB2YXIgc2Vjb25kQ2hpbGRJbmRleCA9IGNvbnRhaW5lckluZGljZXNbMV07CiAK
LSAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBwcmVkZWNlc3NvcjsKLSAgICAgICAgICAgICAg
dmFyIHRvSGlkZSA9IHN1Y2Nlc3NvcjsKLSAgICAgICAgICAgICAgaWYgKGsgPT0gMSkgewotICAg
ICAgICAgICAgICAgIHNpYmxpbmcgPSBzdWNjZXNzb3I7Ci0gICAgICAgICAgICAgICAgdG9IaWRl
ID0gcHJlZGVjZXNzb3I7Ci0gICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHZhciBz
aWJsaW5nUHJlY2VkZXNDb250YWluZXIgPSBzaWJsaW5nSW5kZXggPT0gY29udGFpbmVySW5kZXgg
LSAxOworICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGRJbmRleCA+IHNlY29uZENoaWxk
SW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
ICBpZiAoY29udGFpbmVySXNQb3NpdGlvbmVkID09IDEgJiYgaGFzUG9zaXRpb25lZEFuY2VzdG9y
ID09IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
ICBpZiAoc2libGluZ1Nob3VsZEJlWmVyb0lmUHJlY2VkZXNDb250YWluZXIgPT0gMSAmJiAhc2li
bGluZ1ByZWNlZGVzQ29udGFpbmVyKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyaW5nID0gWyBudWxsLCBudWxsLCBudWxsLCBudWxs
IF07CisgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tzaWJsaW5nSW5kZXhdID0gc2libGluZ0lz
U3VjY2Vzc29yID09IDEgPyBzdWNjZXNzb3IgOiBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAg
ICAgIG9yZGVyaW5nW2NvbnRhaW5lckluZGV4XSA9IGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9PSAx
ID8gYW5jZXN0b3IgOiBjb250YWluZXI7CisgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tmaXJz
dENoaWxkSW5kZXhdID0gZmlyc3RDaGlsZDsKKyAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW3Nl
Y29uZENoaWxkSW5kZXhdID0gc2Vjb25kQ2hpbGQ7CisKKyAgICAgICAgICAgICAgICAgIHZhciBz
aWJsaW5nID0gcHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAgICB2YXIgdG9IaWRlID0gc3Vj
Y2Vzc29yOworICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmdJc1N1Y2Nlc3NvciA9PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBzdWNjZXNzb3I7CisgICAgICAgICAgICAg
ICAgICAgIHRvSGlkZSA9IHByZWRlY2Vzc29yOworICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICB0b0hpZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgICAg
ICAgICAgIHNpYmxpbmcuc3R5bGUuZGlzcGxheSA9ICcnOworCisgICAgICAgICAgICAgICAgICB2
YXIgcG9zaXRpb25lZCA9IG51bGw7CisgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySXNQ
b3NpdGlvbmVkID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBv
c2l0aW9uID0gJ3JlbGF0aXZlJzsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCA9IGNv
bnRhaW5lcjsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBj
b250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnJzsKIAotICAgICAgICAgICAgICAvLyBUaGUgcmVz
dWx0IHNob3VsZCBiZSB0aGUgc2FtZSBpZiB0aGUgdGhlIGVsZW1lbnQgdG8gaGlkZSBpcwotICAg
ICAgICAgICAgICAvLyBkaXNwbGF5OmhpZGRlbiBvciBkaXNwbGF5Om5vbmUuCi0gICAgICAgICAg
ICAgIGlmIChsID09IDApCi0gICAgICAgICAgICAgICAgdG9IaWRlLnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0b0hpZGUuc3R5bGUu
ZGlzcGxheSA9ICdoaWRkZW4nOwotCi0gICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuZGlzcGxh
eSA9ICcnOwotCi0gICAgICAgICAgICAgIGlmIChqID09IDApCi0gICAgICAgICAgICAgICAgc2li
bGluZy5zdHlsZS56SW5kZXggPSAobWF4WkluZGV4ICsgMSkudG9TdHJpbmcoKTsKLSAgICAgICAg
ICAgICAgZWxzZSBpZiAoaiA9PSAxKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUueklu
ZGV4ID0gKG1pblpJbmRleCAtIDEpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UgaWYg
KGogPT0gMikKLSAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IG1heFpJbmRl
eC50b1N0cmluZygpOwotICAgICAgICAgICAgICBlbHNlIGlmIChqID09IDMpCi0gICAgICAgICAg
ICAgICAgc2libGluZy5zdHlsZS56SW5kZXggPSBtaW5aSW5kZXgudG9TdHJpbmcoKTsKLSAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gKCht
aW5aSW5kZXggKyBtYXhaSW5kZXgpIC8gMikudG9TdHJpbmcoKTsKLQotICAgICAgICAgICAgICB2
YXIgYXJlQ29udGlndW91cyA9IGZhbHNlOwotICAgICAgICAgICAgICBpZiAoc2libGluZy5zdHls
ZS56SW5kZXggPiBtYXhaSW5kZXggfHwKLSAgICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUu
ekluZGV4IDwgbWluWkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIGlzIG91
dHNpZGUgdGhlIHJhbmdlIG9mIG91ciBkZXNjZW5kYW50cy4KLSAgICAgICAgICAgICAgICAgIGFy
ZUNvbnRpZ3VvdXMgPSB0cnVlOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpYmxpbmcuc3R5
bGUuekluZGV4IDwgbWF4WkluZGV4ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2libGlu
Zy5zdHlsZS56SW5kZXggPiBtaW5aSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIC8vIHNpYmxp
bmcgaXMgYmV0d2VlbiBvdXIgZGVzY2VuZGFudHMuCi0gICAgICAgICAgICAgICAgICBhcmVDb250
aWd1b3VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2libGluZy5zdHlsZS56
SW5kZXggPT0gbWluWkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAobWluWkluZGV4ID09
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIGxpZXMgYmV0d2VlbiB1cyAo
bm9ybWFsIGZsb3cpIGFuZCBvdXIgcG9zCi0gICAgICAgICAgICAgICAgICAgICAgLy8gei1vcmRl
ciBkZXNjZW5kYW50cywgc28gd2UgYXJlIG5vdCBjb250aWd1b3VzLgotICAgICAgICAgICAgICAg
ICAgICAgIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZydzIHpJbmRleCBtYXRjaGVzIHRoZSBt
aW47IHdlJ3JlIG9ubHkgb2sgaWYgaXQKLSAgICAgICAgICAgICAgICAgICAgICAvLyBhcHBlYXJz
IGZpcnN0LgotICAgICAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMgPSBrID09IDA7Cisg
ICAgICAgICAgICAgICAgICBpZiAoaGFzUG9zaXRpb25lZEFuY2VzdG9yID09IDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYW5jZXN0b3Iuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gYW5jZXN0b3I7CisgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3Iuc3R5bGUucG9zaXRpb24gPSAn
JzsKKworICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIHotaW5kaWNlcy4KKyAgICAgICAgICAg
ICAgICAgIGlmIChjb250YWluZXJJc1Bvc2l0aW9uZWQgPT0gMSB8fCBoYXNQb3NpdGlvbmVkQW5j
ZXN0b3IgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbY29udGFpbmVySW5kZXhd
LnN0eWxlLnpJbmRleCA9ICcwJzsKKyAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBjb250YWluZXIuc3R5bGUuekluZGV4ID0gJyc7CisgICAgICAgICAgICAgICAg
ICAgIGFuY2VzdG9yLnN0eWxlLnpJbmRleCA9ICcnOwogICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNpYmxpbmcuc3R5bGUuekluZGV4ID09IG1heFpJbmRleCkg
ewotICAgICAgICAgICAgICAgICAgaWYgKG1heFpJbmRleCA8IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAvLyBzaWJsaW5nIGxpZXMgYmV0d2VlbiB1cyAobm9ybWFsIGZsb3cpIGFuZCBuZWcg
ei1vcmRlcgotICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2NlbmRhbnRzLCBzbyB3ZSBhcmUg
bm90IGNvbnRpZ3VvdXMuCi0gICAgICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhaSW5kZXggPT0gMCkgewotICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcgaXMgaW4gdGhlIHBvcyB6LW9yZGVyIGxpc3Qg
YW5kIGRvZXMgbm90IGFmZmVjdAotICAgICAgICAgICAgICAgICAgICAgIC8vIHVzIHNpbmNlIHdl
J3JlIGluIHRoZSBub3JtYWwgZmxvdyBsaXN0IGFuZCBvdXIKLSAgICAgICAgICAgICAgICAgICAg
ICAvLyBkZXNjYW5kYW50cyBhcmUgaW4gdGhlIG5lZyB6LW9yZGVyIGxpc3QuCi0gICAgICAgICAg
ICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxpbmcncyB6SW5kZXggbWF0Y2hlcyB0
aGUgbWF4OyB3ZSdyZSBvbmx5IG9rIGlmIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gYXBw
ZWFycyBhZnRlci4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gayA9PSAx
OworCisgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFpJbmRleCA9IHNpYmxpbmdQcmVjZWRl
c0NvbnRhaW5lciAmJiBzaWJsaW5nU2hvdWxkQmVaZXJvSWZQcmVjZWRlc0NvbnRhaW5lciA9PSAx
ID8gMCA6IC0xOworICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY3VycmVudEluZGV4ID0gY29u
dGFpbmVySW5kZXggLSAxOyBjdXJyZW50SW5kZXggPj0gMDsgLS1jdXJyZW50SW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbY3VycmVudEluZGV4XS5zdHlsZS56SW5kZXggPSBj
dXJyZW50WkluZGV4LnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRaSW5k
ZXgtLTsKICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgIHByaW50UmVzdWx0KGFyZUNvbnRpZ3VvdXMpOwotICAgICAgICAgICAgfSAvLyBmb3IgbAot
ICAgICAgICAgIH0gLy8gZm9yIGsKLSAgICAgICAgfSAvLyBmb3IgagotICAgICAgfSAvLyBmb3Ig
aQotCi0gICAgICAvLyBOb3cgY2hlY2sgdGhhdCB3ZSBkb24ndCBwcm9tb3RlIGlmIHdlIGhhdmUg
YW4gb3V0IG9mIGZsb3cgZGVzY2VuZGFudC4KLSAgICAgIC8vIFdlIG5lZWQgdG8gaGlkZSB0aGUg
cHJlZGVjZXNzb3IgYW5kIHN1Y2Nlc3NvciBzbyB0aGV5IGRvbid0IGludGVyZmVyZQotICAgICAg
Ly8gd2l0aCB0aGlzIGV4cGVyaW1lbnQuCi0gICAgICBwcmVkZWNlc3Nvci5zdHlsZS5kaXNwbGF5
ID0gJ25vbmUnOwotICAgICAgc3VjY2Vzc29yLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAg
ICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAg
ICAgZGVzY2VuZGFudC5zdHlsZS5kaXNwbGF5ID0gJ2hpZGRlbic7Ci0gICAgICAgIGVsc2UgaWYg
KGkgPT0gMSkKLSAgICAgICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAnJzsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgIGRlc2NlbmRhbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLQot
ICAgICAgICAvLyBJZiB0aGUgb3V0IG9mIGZsb3cgcG9zaXRpb25lZCBkZXNjZW5kYW50IGlzIHZp
c2libGUsIHdlIGNhbm5vdCBvcHQKLSAgICAgICAgLy8gaW50byBjb21wb3NpdGVkIHNjcm9sbGlu
Zy4KLSAgICAgICAgcHJpbnRSZXN1bHQoaSAhPSAxKTsKLSAgICAgICAgY291bnQrKzsKLSAgICAg
IH0gLy8gZm9yIGkKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRaSW5kZXggPSAxOworICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgY3VycmVudEluZGV4ID0gY29udGFpbmVySW5kZXggKyAxOyBj
dXJyZW50SW5kZXggPCA0OyArK2N1cnJlbnRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBv
cmRlcmluZ1tjdXJyZW50SW5kZXhdLnN0eWxlLnpJbmRleCA9IGN1cnJlbnRaSW5kZXgudG9TdHJp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFpJbmRleCsrOworICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAg
ICAgICAgICAgICAgICAgICAvLyBiZWxvdywgd2hlbiB3ZSBzZXQgd2Via2l0VHJhbnNmb3JtIHRv
ICcnLCB3ZSB3YW50IHRoYXQgdG8gZm9yY2UgYSBzdHlsZSByZWNhbGN1bGF0aW9uLgorICAgICAg
ICAgICAgICAgICAgICAvLyBNYWtpbmcgdGhpcyBub3QgJycgaGVyZSB3aWxsIGZvcmNlIHRoaXMg
cmVjYWxjdWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndlYmtp
dFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVaKDBweCknOworICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5ib2R5Lm9mZnNldFRvcDsKKworICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZSB0byBu
b3QgcHJvbW90ZS4KKyAgICAgICAgICAgICAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5n
cy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9
ICcnOworCisgICAgICAgICAgICAgICAgICAgIHZhciBvbGRTdGFja2luZ09yZGVyID0gZ2V0U3Rh
Y2tpbmdPcmRlcigpOworCisgICAgICAgICAgICAgICAgICAgIC8vIGZvcmNlIHRvIHByb21vdGUu
CisgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCh0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVa
KDBweCknOworCisgICAgICAgICAgICAgICAgICAgIHZhciBuZXdTdGFja2luZ09yZGVyID0gZ2V0
U3RhY2tpbmdPcmRlcigpOwogCisgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRPcHRJbiA9
IG9sZFN0YWNraW5nT3JkZXIubGVuZ3RoID09IG5ld1N0YWNraW5nT3JkZXIubGVuZ3RoOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZFN0YWNraW5nT3JkZXIubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkU3RhY2tpbmdPcmRlcltp
XSAhPSBuZXdTdGFja2luZ09yZGVyW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG91
bGRPcHRJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICcnOworICAgICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkT3B0SW4gIT0gZGlkT3B0SW4oKSkgeworICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRPcHRJbikgeworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUo
IkZBSUwgLSBzaG91bGQndmUgYXV0b21hdGljYWxseSBvcHRlZCBpbiBidXQgZGlkbid0ICIgKyBj
b3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlKCdGQUlMIC0gYXV0b21hdGljYWxseSBvcHRlZCBpbiBhbmQgY2hhbmdlZCBz
dGFja2luZyBvcmRlciAnICsgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQogICAgIH0gLy8gZnVuY3Rpb24g
ZG9UZXN0CiAKKyAgICBmdW5jdGlvbiB0b2dnbGUoKSB7CisgICAgICB2YXIgY29udGFpbmVyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOworICAgICAgY29udGFpbmVyLnN0
eWxlLndlYmtpdFRyYW5zZm9ybSA9IGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPyAn
JyA6ICd0cmFuc2xhdGVaKDBweCknOworCisgICAgICAvLyBGb3JjZSBhIHN0eWxlIHJlY2FsYy4K
KyAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworCisgICAgICAvLyBGb3JjZSBhIGxheW91
dC4KKyAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdCb3goY29udGFpbmVyKTsKKyAgICB9
CisKICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOwog
ICA8L3NjcmlwdD4KIDwvaGVhZD4KIAogPGJvZHk+Ci0gIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQi
IGlkPSJwcmVkZWNlc3NvciI+PC9kaXY+Ci0gIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgaWQ9ImNv
bnRhaW5lciI+Ci0gICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJmaXJzdENoaWxkIj48L2Rp
dj4KLSAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIgaWQ9InNlY29uZENoaWxkIj48L2Rpdj4KLSAg
ICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0iZGVzY2VuZGFudCI+PC9kaXY+CisgIDxkaXYg
aWQ9ImFuY2VzdG9yIj4KKyAgICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0icHJlZGVjZXNz
b3IiPjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgaWQ9ImNvbnRhaW5lciI+Cisg
ICAgICA8ZGl2IGNsYXNzPSJzY3JvbGxlZCIgaWQ9ImZpcnN0Q2hpbGQiPjwvZGl2PgorICAgICAg
PGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJzZWNvbmRDaGlsZCI+PC9kaXY+CisgICAgICA8ZGl2
IGlkPSJub3JtYWxGbG93Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwb3Np
dGlvbmVkIiBpZD0ic3VjY2Vzc29yIj48L2Rpdj4KICAgPC9kaXY+Ci0gIDxkaXYgY2xhc3M9InBv
c2l0aW9uZWQiIGlkPSJzdWNjZXNzb3IiPjwvZGl2PgogICA8cHJlIGlkPSJjb25zb2xlIj48L3By
ZT4KIDwvYm9keT4KIDwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRp
bmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNl
c3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9vcHQt
aW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lOGMxMGRiYTFmOGFiYWNhNGRmMjkxMzE5YWYyZTJjYjc2N2E2OWQ5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWlu
dG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyIEBACitQYXNzZWQgLSBsYXllciB0cmVlLgorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGlu
Zy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0bWwgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVy
Zmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9yLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzQyMDVhZTlkYWM1NTQwYTk4ZTBiYmRkNTAyODhkMzY0N2QzYzA1Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1p
bnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3IuaHRtbApAQCAtMCww
ICsxLDEwNyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEg
VHJhbnNpdGlvbmFsLy9FTiIKKyAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5k
dGQiPgorCis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29u
dGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KKyAgPHRpdGxl
Pk9wdGluZyBpbnRvIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nPC90aXRsZT4KKyAgPHN0eWxlIHR5cGU9
InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAuY29udGFpbmVyIHsKKyAgICAgIHdpZHRo
OiAyMDBweDsKKyAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICBvdmVyZmxvdzogc2Nyb2xsOwor
ICAgICAgbWFyZ2luOiAyMHB4OworICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAg
fQorCisgICAgLnNjcm9sbGVkIHsKKyAgICAgIHdpZHRoOiAxODBweDsKKyAgICAgIGhlaWdodDog
OTBweDsKKyAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7
CisgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgfQorCisgICAgLnBvc2l0aW9uZWQgewor
ICAgICAgd2lkdGg6IDEyMHB4OworICAgICAgaGVpZ2h0OiAyNDBweDsKKyAgICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB9CisKKyAgICAjZmlyc3RDaGlsZCB7CisgICAgICB6LWluZGV4OiAx
OworICAgIH0KKworICAgICNzZWNvbmRDaGlsZCB7CisgICAgICB6LWluZGV4OiAyOworICAgIH0K
KworICAgICNwcmVkZWNlc3NvciB7CisgICAgICBsZWZ0OiAyMHB4OworICAgICAgdG9wOiAyMHB4
OworICAgICAgei1pbmRleDogMDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAg
IH0KKworICAgICNhbmNlc3RvciB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAg
IH0KKworICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNl
dD0idXRmLTgiPgorICAgIHZhciBkZWJ1Z01vZGUgPSBmYWxzZTsKKworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCisgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQodHJ1ZSk7CisKKyAgICBm
dW5jdGlvbiB3cml0ZShzdHIpCisgICAgeworICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjb25zb2xlJyk7CisgICAgICB2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHN0ciArICdcbicpOworICAgICAgcHJlLmFwcGVuZENoaWxkKHRleHQpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgeworICAgICAgdmFyIHByZWRlY2Vzc29yID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWRlY2Vzc29yJyk7CisgICAgICB2YXIgYW5jZXN0
b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5jZXN0b3InKTsKKyAgICAgIHZhciBjb250
YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7CisgICAgICB2YXIg
Zmlyc3RDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdENoaWxkJyk7CisgICAg
ICB2YXIgc2Vjb25kQ2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Vjb25kQ2hpbGQn
KTsKKworICAgICAgLy8gRm9yY2UgYSBzdHlsZSByZWNhbGMuCisgICAgICBkb2N1bWVudC5ib2R5
Lm9mZnNldFRvcDsKKworICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgLy8g
Rm9yY2UgYSBsYXlvdXQuCisgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdCb3goY29u
dGFpbmVyKTsKKyAgICAgICAgdmFyIGxheWVyVHJlZSA9IHdpbmRvdy5pbnRlcm5hbHMubGF5ZXJU
cmVlQXNUZXh0KGRvY3VtZW50KTsKKworICAgICAgICBpZiAoIWxheWVyVHJlZSkKKyAgICAgICAg
ICB3cml0ZSgnRkFJTEVEIC0gbm8gbGF5ZXIgdHJlZS4nKQorICAgICAgICBlbHNlCisgICAgICAg
ICAgd3JpdGUoJ1Bhc3NlZCAtIGxheWVyIHRyZWUuJykKKworICAgICAgICBpZiAobGF5ZXJUcmVl
ICYmIGRlYnVnTW9kZSkKKyAgICAgICAgICAgIHdyaXRlKGxheWVyVHJlZSk7CisgICAgICB9Cisg
ICAgfSAvLyBmdW5jdGlvbiBkb1Rlc3QKKworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCds
b2FkJywgZG9UZXN0LCBmYWxzZSk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKyAg
PGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InByZWRlY2Vzc29yIj48L2Rpdj4KKyAgPGRpdiBj
bGFzcz0icG9zaXRpb25lZCIgaWQ9ImFuY2VzdG9yIj4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWlu
ZXIiIGlkPSJjb250YWluZXIiPgorICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJmaXJz
dENoaWxkIj48L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0ic2Vjb25kQ2hp
bGQiPjwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKyAgPHByZSBpZD0iY29uc29sZSI+PC9w
cmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCAzNzA2ZTUzY2VlNGQzYzU3MzRjNmJkMmNiMGE0MjcwN2Jh
NDlmZmI2Li5jNjc3MGNkOGY3ZGNkN2IwNDJiN2RjNGIxZmY2ZWE5ZGM2ZmRhZTI3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTM2ODIs
NiArMzY4MiwxMyBAQCB3ZWJraXQub3JnL2IvMTAzMTU2IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1
YWwvZ3B1L2NvbXBvc2l0ZWRzY3JvbGxpbmcvc2Nyb2xsYmFycwogIyBSZXF1aXJlcyBhbiB1cGRh
dGVkIGJhc2VsaW5lIGFmdGVyIDEwNjE0Mi4KIHdlYmtpdC5vcmcvYi8xMDY4MjAgcGxhdGZvcm0v
Y2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9vdmVyZmxvdy9vdmVyZmxv
dy1zY3JvbGwuaHRtbCBbIEZhaWx1cmUgXQogCisjIE5lZWRzIHJlYmFzZWxpbmUgYWZ0ZXIgMTA5
MzAyLgord2Via2l0Lm9yZy9iLzEwOTk2NSBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9j
b21wb3NpdGVkc2Nyb2xsaW5nL292ZXJmbG93L3RleHRhcmVhLXNjcm9sbC10b3VjaC5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTA5OTY1IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwv
c29mdHdhcmVjb21wb3NpdGluZy9vdmVyZmxvdy90ZXh0YXJlYS1zY3JvbGwtdG91Y2guaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzEwOTk2NSBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFs
L2dwdS9jb21wb3NpdGVkc2Nyb2xsaW5nL3Njcm9sbGJhcnMvb3ZlcmZsb3ctc2Nyb2xsYmFyLWNv
bWJpbmF0aW9ucy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTA5OTY1IGNvbXBvc2l0
aW5nL292ZXJmbG93L3RleHRhcmVhLXNjcm9sbC10b3VjaC5odG1sIFsgRmFpbHVyZSBdCisKKwog
IyBGYWlscyBkdWUgdG8gQnVnIDg1ODU2Lgogd2Via2l0Lm9yZy9iLzg1ODU2IFsgV2luIE1hYyBB
bmRyb2lkIF0gZmFzdC9ibG9jay9mbG9hdC8wMjguaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzg1ODU2IFsgV2luIE1hYyBBbmRyb2lkIF0gZmFzdC9ibG9jay9mbG9hdC8w
MjYuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192274</attachid>
            <date>2013-03-08 12:39:57 -0800</date>
            <delta_ts>2013-08-15 09:09:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109302-20130308153600.patch</filename>
            <type>text/plain</type>
            <size>59220</size>
            <attacher name="Glenn Hartmann">hartmanng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNjYjgxNTI3YzRlZmJl
MjMyNTk3ZjI1ZDYwMjZlZmRlZmE4YTM4Zi4uZTkyMTEwZGRmZGE0OTg1MWQzN2U3YjRiOWY5YzE4
MWNjYTBlZDZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAzLTA4ICBHbGVu
biBIYXJ0bWFubiAgPGhhcnRtYW5uZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkg
bG9naWMgZm9yIGF1dG9tYXRpY2FsbHkgb3B0aW5nIGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNpbXBs
aWZ5IHRoZSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVkCisg
ICAgICAgIHNjcm9sbGluZyBieSBnZW5lcmF0aW5nIHR3byBzZXRzIG9mIHotb3JkZXIgbGlzdHMs
IGZpcnN0IGZvcmNpbmcgYQorICAgICAgICBsYXllciB0byBub3QgcHJvbW90ZSwgdGhlbiBmb3Jj
aW5nIGl0IHRvIHByb21vdGUgdGhlIHNlY29uZCB0aW1lLiBUaGUKKyAgICAgICAgdHdvIHNldHMg
b2YgbGlzdHMgY2FuIGJlIHJlbGF0aXZlbHkgZWFzaWx5IGNvbXBhcmVkIGZvciBhbnkgcG9zc2li
bGUKKyAgICAgICAgY2hhbmdlIGluIHN0YWNraW5nIG9yZGVyLiBJZiB0aGUgdHdvIGxpc3RzIGFy
ZSBpbiBmYWN0IHRoZSBzYW1lLCB0aGVuCisgICAgICAgIHdlIGtub3cgaXQgaXMgc2FmZSB0byBw
cm9tb3RlIHRoZSBsYXllciB0byBiZSBhIHN0YWNraW5nIGNvbnRhaW5lci4gVGhpcworICAgICAg
ICBzaG91bGQgYmUgbW9yZSBpbnR1aXRpdmUgYW5kIG1vcmUgcm9idXN0IHRoYW4gdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRpbmcvb3ZlcmZsb3cv
b3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sCisg
ICAgICAgIFRlc3Q6IGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8t
Y29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6Cisg
ICAgICAgIFJlbmFtZWQgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIg
LT4KKyAgICAgICAgbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ2NvbnRhaW5lcgorICAgICAgICAo
V2ViQ29yZTo6aXNQb3NpdGlvbmVkQ29udGFpbmVyKToKKyAgICAgICAgTW92ZWQgaGlnaGVyIHVw
IGluIHRoZSBmaWxlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRT
dGFja2luZ09yZGVyRWxlbWVudEF0KToKKyAgICAgICAgR2V0IFJlbmRlckxheWVyIGF0IHN0YWNr
aW5nIG9yZGVyIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNh
bkJlU3RhY2tpbmdDb250YWluZXIpOgorICAgICAgICBDb21wdXRlIHdoZXRoZXIgdGhlIGN1cnJl
bnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRvIGEgc3RhY2tpbmcKKyAgICAgICAgY29udGFpbmVy
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNhbkJlU3RhY2tpbmdDb250
YWluZXJSZWN1cnNpdmVseSk6CisgICAgICAgIENvbXB1dGUgd2hldGhlciBhbGwgY2hpbGQgbGF5
ZXJzIGNhbiBiZSBwcm9tb3RlZCB0byBzdGFja2luZworICAgICAgICBjb250YWluZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tpbmdDb250YWluZXIpOgorICAg
ICAgICBSZW5hbWVkIG1fZGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyIC0+
CisgICAgICAgIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdjb250YWluZXIKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVJc05vcm1hbEZsb3dPbmx5KToKKyAgICAgICAgUmVm
YWN0b3JlZCBsb2dpYyBmcm9tIHN0eWxlQ2hhbmdlZCB0byByZWZyZXNoIHRoZSBpc05vcm1hbEZs
b3dPbmx5CisgICAgICAgIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVOZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcpOgorICAgICAgICBBZGRlZCBjYWxsIHRvIHVwZGF0
ZUlzTm9ybWFsRmxvd09ubHkoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVMYXllckxpc3RzSWZOZWVkZWQpOgorICAgICAgICBVcGRhdGVkIHRvIGNhbGwgdXBkYXRlQ2Fu
QmVTdGFja2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KCkgaW5zdGVhZCBvZgorICAgICAgICB1cGRh
dGVEZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5n
ZSk6CisgICAgICAgIFNtYWxsIGNvcnJlY3RuZXNzIGZpeDogaXNTdGFja2luZ0NvbnRleHQgY29u
ZGl0aW9ucyBzaG91bGQgYmUKKyAgICAgICAgaXNTdGFja2luZ0NvbnRleHQgfHwgaXNTdGFja2lu
Z0NvbnRhaW5lcigpCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAg
IChSZW5kZXJMYXllcik6CisKIDIwMTMtMDMtMDcgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgRml4IHBhaW50aW5nIHBoYXNlcyBmb3IgY29tcG9zaXRlZCBz
Y3JvbGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDUx
MzRkZmJhOTQ5MDliZGIxN2YyMWZjMGQyNWJhZjRjZDAxMzNjNGEuLjAxODZiYmE0YjgzZmVmOWNl
ZWQ2YTRiZWM4MThkNDg0OTU3Yzk4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZW5kZXJlcikKICAgICAsIG1faGFzT3V0T2ZGbG93UG9z
aXRpb25lZERlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc091dE9mRmxvd1Bvc2l0aW9uZWRE
ZXNjZW5kYW50RGlydHkodHJ1ZSkKICAgICAsIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nKGZh
bHNlKQotICAgICwgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoZmFs
c2UpCisgICAgLCBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVyKGZhbHNlKQogICAg
ICwgbV9pc1Jvb3RMYXllcihyZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX3VzZWRU
cmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxz
ZSkKQEAgLTUzOCwxNjMgKzUzOCwyNzIgQEAgYm9vbCBSZW5kZXJMYXllcjo6YWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpIGNvbnN0CiAgICAgICAgICYmIHJl
bmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpOwogfQogCi0vLyBJZiB3ZSBhcmUgYSBzdGFj
a2luZyBjb250YWluZXIsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGRldGVybWluZSBpZiBvdXIK
LS8vIGRlc2NlbmRhbnRzIGZvciBhIGNvbnRpZ3VvdXMgYmxvY2sgaW4gc3RhY2tpbmcgb3JkZXIu
IFRoaXMgaXMgcmVxdWlyZWQgaW4KLS8vIG9yZGVyIGZvciBhbiBlbGVtZW50IHRvIGJlIHNhZmVs
eSBwcm9tb3RlZCB0byBhIHN0YWNraW5nIGNvbnRhaW5lci4gSXQgaXMgc2FmZQotLy8gdG8gYmVj
b21lIGEgc3RhY2tpbmcgY29udGFpbmVyIGlmIHRoaXMgY2hhbmdlIHdvdWxkIG5vdCBhbHRlciB0
aGUgc3RhY2tpbmcKLS8vIG9yZGVyIG9mIGxheWVycyBvbiB0aGUgcGFnZS4gVGhhdCBjYW4gb25s
eSBoYXBwZW4gaWYgYSBub24tZGVzY2VuZGFudCBhcHBlYXIKLS8vIGJldHdlZW4gdXMgYW5kIG91
ciBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4gSGVyZSdzIGFuIGV4YW1wbGU6Ci0vLwot
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzCi0vLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyAgfCAgXC4KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEEgICBCICAgQwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXCAgIHwgICAv
XC4KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC04ICBEICAyICA3Ci0vLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDUKLS8vCi0vLyBJJ3ZlIGxhYmVsZWQgb3VyIG5vcm1hbCBmbG93IGRlc2Nl
bmRhbnRzIEEsIEIsIEMsIGFuZCBELCBvdXIgc3RhY2tpbmcKLS8vIGNvbnRhaW5lciBkZXNjZW5k
YW50cyB3aXRoIHRoZWlyIHogaW5kaWNlcywgYW5kIHVzIHdpdGggJ3RoaXMnICh3ZSdyZSBhCi0v
LyBzdGFja2luZyBjb250YWluZXIgYW5kIG91ciB6SW5kZXggZG9lc24ndCBtYXR0ZXIgaGVyZSku
IFRoZXNlIG5vZGVzIGFwcGVhciBpbgotLy8gdGhyZWUgbGlzdHM6IHBvc1pPcmRlciwgbmVnWk9y
ZGVyLCBhbmQgbm9ybWFsIGZsb3cgKGtlZXAgaW4gbWluZCB0aGF0IG5vcm1hbAotLy8gZmxvdyBs
YXllcnMgZG9uJ3Qgb3ZlcmxhcCkuIFNvIGlmIHdlIGFycmFuZ2UgdGhlc2UgbGlzdHMgaW4gb3Jk
ZXIgd2UgZ2V0IG91cgotLy8gc3RhY2tpbmcgb3JkZXI6Ci0vLwotLy8gICAgICAgICAgICAgICAg
ICAgICBbLThdLCBbQS1EXSwgWzAsIDIsIDUsIDddLS0+IHBvcyB6LW9yZGVyLgotLy8gICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgIHwKLS8vICAgICAgICBOZWcgei1vcmRlci4gPC0rICAgICAr
LS0+IE5vcm1hbCBmbG93IGRlc2NlbmRhbnRzLgotLy8KLS8vIFdlIGNhbiB0aGVuIGFzc2lnbiBu
ZXcsICdzdGFja2luZycgb3JkZXIgaW5kaWNlcyB0byB0aGVzZSBlbGVtZW50cyBhcyBmb2xsb3dz
OgotLy8KLS8vICAgICAgICAgICAgICAgICAgICAgWy04XSwgW0EtRF0sIFswLCAyLCA1LCA3XQot
Ly8gJ1N0YWNraW5nJyBpbmRpY2VzOiAgLTEgICAgIDAgICAgIDEgIDIgIDMgIDQKLS8vCi0vLyBO
b3RlIHRoYXQgdGhlIG5vcm1hbCBmbG93IGRlc2NlbmRhbnRzIGNhbiBzaGFyZSBhbiBpbmRleCBi
ZWNhdXNlIHRoZXkgZG9uJ3QKLS8vIHN0YWNrL292ZXJsYXAuIE5vdyBvdXIgcHJvYmxlbSBiZWNv
bWVzIHZlcnkgc2ltcGxlOiBhIGxheWVyIGNhbiBzYWZlbHkgYmVjb21lCi0vLyBhIHN0YWNraW5n
IGNvbnRhaW5lciBpZiB0aGUgc3RhY2tpbmctb3JkZXIgaW5kaWNlcyBvZiBpdCBhbmQgaXRzIGRl
c2NlbmRhbnRzCi0vLyBhcHBlYXIgaW4gYSBjb250aWd1b3VzIGJsb2NrIGluIHRoZSBsaXN0IG9m
IHN0YWNraW5nIGluZGljZXMuIFRoaXMgcHJvYmxlbQotLy8gY2FuIGJlIHNvbHZlZCB2ZXJ5IGVm
ZmljaWVudGx5IGJ5IGNhbGN1bGF0aW5nIHRoZSBtaW4vbWF4IHN0YWNraW5nIGluZGljZXMgaW4K
LS8vIHRoZSBzdWJ0cmVlLCBhbmQgdGhlIG51bWJlciBzdGFja2luZyBjb250YWluZXIgZGVzY2Vu
ZGFudHMuIE9uY2Ugd2UgaGF2ZSB0aGlzCi0vLyBpbmZvcm1hdGlvbiwgd2Uga25vdyB0aGF0IHRo
ZSBzdWJ0cmVlJ3MgaW5kaWNlcyBmb3JtIGEgY29udGlndW91cyBibG9jayBpZjoKLS8vCi0vLyAg
ICAgICAgICAgbWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50
cwotLy8KLS8vIFNvIGZvciBub2RlIEEgaW4gdGhlIGV4YW1wbGUgYWJvdmUgd2Ugd291bGQgaGF2
ZToKLS8vICAgbWF4U3RhY2tJbmRleCA9IDEKLS8vICAgbWluU3RhY2tJbmRleCA9IC0xCi0vLyAg
IG51bVNDRGVjZW5kYW50cyA9IDIKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc2l0aW9uZWRDb250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIC8vIEZJWE1FOiBUaGlzIG1h
eSBub3QgYmUgaW4gc3luYyB3aXRoIGNvbnRhaW5pbmdCbG9jay4KKyAgICAvLyBSZW5kZXJPYmpl
Y3Q6OmNhbkNvbnRhaW5GaXhlZFBvc2l0aW9uZWRPYmplY3QoKSBzaG91bGQgcHJvYmFibHkgYmUg
dXNlZAorICAgIC8vIGluc3RlYWQuCisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5ZXJS
ZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOworICAgIHJldHVybiBsYXllci0+aXNSb290TGF5
ZXIoKSB8fCBsYXllclJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+aGFzVHJhbnNm
b3JtKCk7Cit9CisKK2VudW0gU3RhY2tpbmdPcmRlckRpcmVjdGlvbiB7IEZyb21CYWNrZ3JvdW5k
LCBGcm9tRm9yZWdyb3VuZCB9OworCisvLyBXZSdkIGxpa2UgdG8gYmUgYWJsZSB0byBpdGVyYXRl
IHRocm91Z2ggYSBzaW5nbGUgcGFpbnQgb3JkZXIgbGlzdCwgYnV0IGZvcgorLy8gZWZmaWNpZW5j
eSdzIHNha2UsIHdlIGhhbmcgb250byB0d28gbGlzdHMgaW5zdGVhZCAobmFtZWx5LCB0aGUgcG9z
IGFuZCBuZWcKKy8vIHotb3JkZXIgbGlzdHMgcHJvZHVjZWQgYnkgQ29sbGVjdExheWVycykuIFRo
aXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIGluZGV4CisvLyBpbnRvIHRoZXNlIHR3byBsaXN0cyBh
cyBpZiB0aGV5IHdlcmUgb25lLiBJdCBhbHNvIGFsbG93cyB1cyB0byBpbmRleCBpbnRvCisvLyB0
aGlzIHZpcnR1YWwgbGlzdCBlaXRoZXIgZnJvbSB0aGUgc3RhcnQgb3IgZnJvbSB0aGUgZW5kIChp
LmUuLCBpbiBlaXRoZXIKKy8vIHN0YWNraW5nIG9yZGVyIGRpcmVjdGlvbikuCitzdGF0aWMgY29u
c3QgUmVuZGVyTGF5ZXIqIGdldFN0YWNraW5nT3JkZXJFbGVtZW50QXQoY29uc3QgVmVjdG9yPFJl
bmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiBu
ZWdaT3JkZXJMaXN0LCBjb25zdCBTdGFja2luZ09yZGVyRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3Qgc2l6ZV90IGluZGV4KQoreworICAgIHNpemVfdCBuZWdaT3JkZXJMaXN0U2l6ZSA9IG5lZ1pP
cmRlckxpc3QgPyBuZWdaT3JkZXJMaXN0LT5zaXplKCkgOiAwOworCisgICAgaWYgKGRpcmVjdGlv
biA9PSBGcm9tQmFja2dyb3VuZCkgeworICAgICAgICBpZiAoaW5kZXggPCBuZWdaT3JkZXJMaXN0
U2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBuZWdaT3JkZXJMaXN0LT5hdChpbmRleCk7CisKKyAg
ICAgICAgcmV0dXJuIHBvc1pPcmRlckxpc3QtPmF0KGluZGV4IC0gbmVnWk9yZGVyTGlzdFNpemUp
OworICAgIH0KKworICAgIHNpemVfdCBwb3NaT3JkZXJMaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3Qg
PyBwb3NaT3JkZXJMaXN0LT5zaXplKCkgOiAwOworCisgICAgaWYgKGluZGV4IDwgcG9zWk9yZGVy
TGlzdFNpemUpCisgICAgICAgIHJldHVybiBwb3NaT3JkZXJMaXN0LT5hdChwb3NaT3JkZXJMaXN0
U2l6ZSAtIGluZGV4IC0gMSk7CisKKyAgICByZXR1cm4gbmVnWk9yZGVyTGlzdC0+YXQobmVnWk9y
ZGVyTGlzdFNpemUgLSAoaW5kZXggLSBwb3NaT3JkZXJMaXN0U2l6ZSkgLSAxKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllcjo6Y29sbGVjdEJlZm9yZUFmdGVyUHJvbW90aW9uWk9yZGVyTGlzdHMoUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0LAorICAgIE93blB0cjxWZWN0b3I8UmVu
ZGVyTGF5ZXIqPiA+JiBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwKKyAgICBPd25QdHI8VmVj
dG9yPFJlbmRlckxheWVyKj4gPiYgbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGUsCisgICAgT3du
UHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4mIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUsCisg
ICAgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4mIG5lZ1pPcmRlckxpc3RBZnRlclByb21v
dGUpCit7CisgICAgLy8gV2UgY2FuJ3QgdXNlIFRlbXBvcmFyeUNoYW5nZTw+IGhlcmUgc2luY2Ug
bV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgYW5kCisgICAgLy8gbV9pc05vcm1hbEZsb3dPbmx5
IGFyZSBib3RoIGJpdGZpZWxkcywgc28gd2UgaGF2ZSB0byBkbyBpdCB0aGUKKyAgICAvLyBvbGQt
ZmFzaGlvbmVkIHdheS4KKyAgICBib29sIG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IG1f
bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nOworICAgIGJvb2wgb2xkSXNOb3JtYWxGbG93T25seSA9
IG1faXNOb3JtYWxGbG93T25seTsKKworICAgIC8vIFNldCB0aGUgZmxhZyBvbiB0aGUgY3VycmVu
dCBsYXllciwgdGhlbiByZWJ1aWxkIGFuY2VzdG9yIHN0YWNraW5nCisgICAgLy8gY29udGV4dCdz
IGxpc3RzLiBUaGlzIHdheSwgd2UgY2FuIHNlZSB0aGUgZXhhY3QgZWZmZWN0cyB0aGF0IHByb21v
dGluZworICAgIC8vIHRoaXMgbGF5ZXIgd291bGQgY2F1c2UuCisgICAgbV9pc05vcm1hbEZsb3dP
bmx5ID0gdHJ1ZTsKKyAgICBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGZhbHNlOworICAg
IGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0LT5yZWJ1aWxkWk9yZGVyTGlzdHMoU3RvcEF0U3RhY2tp
bmdDb250ZXh0cywgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUsIG5lZ1pPcmRlckxpc3RCZWZv
cmVQcm9tb3RlLCAwKTsKKworICAgIG1faXNOb3JtYWxGbG93T25seSA9IGZhbHNlOworICAgIG1f
bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICBhbmNlc3RvclN0YWNraW5nQ29u
dGV4dC0+cmVidWlsZFpPcmRlckxpc3RzKFN0b3BBdFN0YWNraW5nQ29udGV4dHMsIHBvc1pPcmRl
ckxpc3RBZnRlclByb21vdGUsIG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGUsIHRoaXMpOworCisg
ICAgbV9uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBvbGROZWVkc0NvbXBvc2l0ZWRTY3JvbGxp
bmc7CisgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gb2xkSXNOb3JtYWxGbG93T25seTsKK30KKwor
Ly8gQWZ0ZXIgcHJvbW90aW9uLCB0aGUgcGFpbnQgb3JkZXIgY29uc2lzdHMgb2YKKy8vIGEpIHRo
ZSBub24tZGVzY2VuZGFudHMgd2hpY2ggcHJlY2VkZSB0aGUgcHJvbW90ZWQgbGF5ZXIsCisvLyBi
KSB0aGUgcHJvbW90ZWQgbGF5ZXIsIGFuZAorLy8gYykgdGhlIG5vbi1kZXNjZW5kYW50cyB3aGlj
aCBzdWNjZWVkIHRoZSBwcm9tb3RlZCBsYXllci4KIC8vCi0vLyBhbmQgc28sCi0vLyAgICAgICBt
YXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBudW1TQ0Rlc2NlbmRhbnRzCi0vLyAgPT09
PiAgICAgICAgICAgICAgICAgICAgICAxIC0gKC0xKSA9PSAyCi0vLyAgPT09PiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMiA9PSAyCisvLyBJZiB0aGUgY3VycmVudCBsYXllcidzIGRlc2Nl
bmRhbnRzIGZvcm0gYSBjb250aWd1b3VzIGJsb2NrIGluIHBhaW50IG9yZGVyCisvLyBiZWZvcmUg
cHJvbW90aW9uLCB0aGUgcGFpbnQgb3JkZXIgd2lsbCBjb25zaXN0IG9mCisvLyBhKSB0aGUgbm9u
LWRlc2NlbmRhbnRzIHdoaWNoIHByZWNlZGUgdGhlIGN1cnJlbnQgbGF5ZXIgYW5kIGl0cyBkZXNj
ZW5kYW50cywKKy8vIGIpIHRoZSBjdXJyZW50IGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKKy8v
IGMpIFRoZSBub24tZGVzY2VuZGFudHMgd2hpY2ggc3VjY2VlZCB0aGUgY3VycmVudCBsYXllciBh
bmQgaXRzIGRlc2NlbmRhbnRzLgogLy8KLS8vICBTaW5jZSB0aGlzIGlzIHRydWUsIEEgY2FuIHNh
ZmVseSBiZWNvbWUgYSBzdGFja2luZyBjb250YWluZXIuCi0vLyAgTm93LCBmb3Igbm9kZSBDIHdl
IGhhdmU6CisvLyBTdWItbGlzdHMgKGEpIGFuZCAoYykgc2hvdWxkIGJlIGlkZW50aWNhbCBpbiBi
b3RoIHBhaW50IG9yZGVyIGxpc3RzIGlmCisvLyBhbmQgb25seSBpZiB0aGUgZGVzY2VuZGFudHMg
Zm9ybSBhIGNvbnRpZ3VvdXMgYmxvY2suIEluIGZhY3QsIHRoaXMgaXMgdGhlCisvLyBvbmx5IGNo
ZWNrIHdlIG5lZWQgdG8gcGVyZm9ybSBzaW5jZSB0aGUgb3JkZXIgb2YgdGhlIGRlc2NlbmRhbnRz
IHdpdGgKKy8vIHJlc3BlY3QgdG8gZWFjaCBvdGhlciBjYW5ub3QgYmUgYWZmZWN0ZWQgYnkgcHJv
bW90aW9uIChpLmUuLCB3ZSBkb24ndAorLy8gbmVlZCB0byB3b3JyeSBhYm91dCBzdWItbGlzdCAo
YikpLgogLy8KLS8vICAgbWF4U3RhY2tJbmRleCA9IDQKLS8vICAgbWluU3RhY2tJbmRleCA9IDAg
PC0tIGJlY2F1c2UgQyBoYXMgc3RhY2tpbmcgaW5kZXggMC4KLS8vICAgbnVtU0NEZWNlbmRhbnRz
ID0gMgorLy8gU29tZSBleGFtcGxlczoKKy8vIEMgPSBjdXJyZW50TGF5ZXIKKy8vIC0gPSBuZWdh
dGl2ZSB6LW9yZGVyIGNoaWxkIG9mIGN1cnJlbnRMYXllcgorLy8gKyA9IHBvc2l0aXZlIHotb3Jk
ZXIgY2hpbGQgb2YgY3VycmVudExheWVyCisvLyBBID0gcG9zaXRpb25lZCBhbmNlc3RvciBvZiBj
dXJyZW50TGF5ZXIKKy8vIHggPSBhbnkgb3RoZXIgUmVuZGVyTGF5ZXIgaW4gdGhlIGxpc3QKIC8v
Ci0vLyBhbmQgc28sCi0vLyAgICAgICBtYXhTdGFja0luZGV4IC0gbWluU3RhY2tJbmRleCA9PSBu
dW1TQ0Rlc2NlbmRhbnRzCi0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gMCA9
PSAyCi0vLyAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA9PSAyCisvLyAgICAg
ICAgb3JpZ2luYWwgICAgICAgICAgICAgICAgICAgIHwgICB6T3JkZXJMaXN0QmVmb3JlUHJvbW90
ZSAgICB8ICB6T3JkZXJMaXN0QWZ0ZXJQcm9tb3RlCisvLyAgICAgICAgek9yZGVyTGlzdEJlZm9y
ZVByb21vdGUgICAgIHwgIGFmdGVyIGluc2VydGluZyBDIGFzIGFib3ZlICB8CisvLyAgICAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAoMSkgICAgIHgtLS0rKyt4ICAgICAgICAg
ICAgICAgICAgIHwgIHgtLS1DKysreCAgICAgICAgICAgICAgICAgICB8ICAgICB4Q3gKKy8vICgy
KSAgICAgeC0tLStBKyt4ICAgICAgICAgICAgICAgICAgfCAgeC0tLStBQysreCAgICAgICAgICAg
ICAgICAgIHwgICAgIHhBQ3gKKy8vICgzKSAgICAgeC14LS0rKyt4ICAgICAgICAgICAgICAgICAg
fCAgeC14LS1DKysreCAgICAgICAgICAgICAgICAgIHwgICAgIHh4Q3gKKy8vICg0KSAgICAgeHhB
Kyt4ICAgICAgICAgICAgICAgICAgICAgfCAgeHhBQysreCAgICAgICAgICAgICAgICAgICAgIHwg
ICAgIHh4QUN4CiAvLwotLy8gU2luY2UgdGhpcyBpcyBmYWxzZSwgQyBjYW5ub3QgYmUgc2FmZWx5
IHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVyLiBUaGlzCi0vLyBoYXBwZW5lZCBiZWNh
dXNlIG9mIHRoZSBlbGVtZW50cyB3aXRoIHotaW5kZXggNSBhbmQgMC4gTm93IGlmIDUgaGFkIGJl
ZW4gYQotLy8gY2hpbGQgb2YgQyByYXRoZXIgdGhhbiBELCBhbmQgQSBoYWQgbm8gY2hpbGQgd2l0
aCBaIGluZGV4IDAsIHdlIHdvdWxkIGhhdmUgaGFkOgorLy8gSW4gZXhhbXBsZSAoMSksIHdlIGNv
bXBhcmUgc3ViLWxpc3QgKGEpIGJ5IG1hcmNoaW5nIGZyb20gdGhlIGxlZnQgb2YgYm90aAorLy8g
bGlzdHMgKHpPcmRlckxpc3RCZWZvcmVQcm9tb3RlIGFmdGVyIGluc2VydGluZyBDIGFuZAorLy8g
ek9yZGVyTGlzdEFmdGVyUHJvbW90ZSkuIFRoZSBmaXJzdCBtaXNtYXRjaCBpcyBhdCBpbmRleCAx
IHdoZW4gd2UgaGl0ICctJworLy8gYW5kICdDJy4gVGhhdCBtZWFucyB3ZSBoYXZlIG5lZyB6LW9y
ZGVyIGRlc2NlbmRhbnRzLiBUaGlzIGlzIGEgcHJvYmxlbSBpZgorLy8gd2UgaGF2ZSBhIGJhY2tn
cm91bmQuIEJlZm9yZSBwcm9tb3Rpb24sIHRoaXMgYmcgd291bGQgZ2V0IHBhaW50ZWQgd2l0aAor
Ly8gdGhlIGN1cnJlbnQgbGF5ZXIgKGkuZS4sIGFmdGVyIHRoZSBuZWcgei1vcmRlciBkZXNjZW5k
YW50cyksIGJ1dCBhZnRlcgorLy8gcHJvbW90aW9uIHRoZSBiZyB3b3VsZCBnZXQgcGFpbnRlZCBi
ZWZvcmUgdGhlbS4gVGhpcyBpcyBhIHN0YWNraW5nIG9yZGVyCisvLyB2aW9sYXRpb24gYW5kIHdl
IGNhbid0IHByb21vdGUuIEhvd2V2ZXIsIGlmIHdlIGRvbid0IGhhdmUgYSBiYWNrZ3JvdW5kLAor
Ly8gd2Ugd291bGQgY29udGludWUgb24gdG8gdGhlIHNlY29uZCBwYXNzLiBXaGVuIGNvbXBhcmlu
ZyBmcm9tIHRoZSByaWdodCwKKy8vIHdlIG1pc21hdGNoIG9uICcrJyBhbmQgJ0MnLiBTaW5jZSB3
ZSBoaXQgJ0MnIG9uIHpPcmRlckxpc3RBZnRlclByb21vdGUsCisvLyB3ZSBrbm93IHRoYXQgdGhl
IGNoaWxkcmVuIGFyZSBjb250aWd1b3VzLCBhbmQgd2Ugd2lsbCBwcm9tb3RlLgogLy8KLS8vICAg
bWF4U3RhY2tJbmRleCA9IDMKLS8vICAgbWluU3RhY2tJbmRleCA9IDAgPC0tIGJlY2F1c2UgQyBo
YXMgc3RhY2tpbmcgaW5kZXggMC4KLS8vICAgbnVtU0NEZWNlbmRhbnRzID0gMworLy8gSW4gZXhh
bXBsZSAoMiksIHdoZW4gbWFyY2hpbmcgZnJvbSB0aGUgbGVmdCwgd2UnbGwgaGl0IGEgbWlzbWF0
Y2ggYWdhaW4KKy8vIG9uIHRoZSBzZWNvbmQgZWxlbWVudCB3ZSBsb29rIGF0LiBUaGlzIHRpbWUs
IHNpbmNlIHRoaXMgZWxlbWVudCBpcyBhbiAnQScKKy8vIGluIHpPcmRlckxpc3RBZnRlclByb21v
dGUsIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYW4gZXh0cmEgbGF5ZXIKKy8vICh0aGUg
J0EnKSBtaXhlZCBpbiB3aXRoIHRoZSBjaGlsZHJlbi4gVGhpcyBjb3VsZCBjYXVzZSBhIGNoYW5n
ZSBpbiBwYWludAorLy8gb3JkZXIgaWYgd2UgcHJvbW90ZSwgc28gd2UgZGVjaWRlIG5vdCB0byBh
bmQgYnJlYWsgb3V0IG9mIHRoZSBsb29wLiBOb3RlCisvLyB0aGF0IGlmIHRoZSBjdXJyZW50IGxh
eWVyIGhhcyBhIGJhY2tncm91bmQsIHRoaXMgd291bGQgcHJvdmlkZSBhIHNlY29uZAorLy8gcmVh
c29uIG5vdCB0byBvcHQgaW4sIHNpbmNlIGFnYWluIHdlIGhhdmUgbmVnYXRpdmUgei1vcmRlciBj
aGlsZHJlbiB3aG8KKy8vIHdvdWxkIGNoYW5nZSBwYWludCBvcmRlciB3aXRoIHJlc3BlY3QgdG8g
b3VyIGJhY2tncm91bmQgaWYgd2UgcHJvbW90ZWQuCiAvLwotLy8gYW5kIHNvLAotLy8gICAgICAg
bWF4U3RhY2tJbmRleCAtIG1pblN0YWNrSW5kZXggPT0gbnVtU0NEZXNjZW5kYW50cwotLy8gID09
PT4gICAgICAgICAgICAgICAgICAgICAgICAgMyAtIDAgPT0gMwotLy8gID09PT4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDMgPT0gMworLy8gSW4gZXhhbXBsZSAoMyksIHRoZSBkaXNjb250
aWd1aXR5IG9mIHRoZSBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxkcmVuIGNhdXNlcworLy8gdXMgdG8g
ZmFpbCBlYXJseSBpbiBvdXIgIkZyb21CYWNrZ3JvdW5kIiBwYXNzIHdoZW4gd2UgdHJ5IHRvIGNv
bXBhcmUgJy0nCisvLyBmcm9tIHpPcmRlckxpc3RCZWZvcmVQcm9tb3RlIHdpdGggJ3gnIGluIHpP
cmRlckxpc3RBZnRlclByb21vdGUuCiAvLwotLy8gIEFuZCB3ZSB3b3VsZCBjb25jbHVkZSB0aGF0
IEMgY291bGQgYmUgcHJvbW90ZWQuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVEZXNjZW5kYW50
c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIoKQotewotICAgIGlmICghaXNTdGFja2luZ0Nv
bnRleHQoKSB8fCAhYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1fbm9ybWFsRmxvd0xpc3REaXJ0
eSk7Ci0gICAgQVNTRVJUKCFtX3pPcmRlckxpc3RzRGlydHkpOwotCi0gICAgT3duUHRyPFZlY3Rv
cjxSZW5kZXJMYXllcio+ID4gcG9zWk9yZGVyTGlzdDsKLSAgICBPd25QdHI8VmVjdG9yPFJlbmRl
ckxheWVyKj4gPiBuZWdaT3JkZXJMaXN0OwotICAgIHJlYnVpbGRaT3JkZXJMaXN0cyhTdG9wQXRT
dGFja2luZ0NvbnRleHRzLCBwb3NaT3JkZXJMaXN0LCBuZWdaT3JkZXJMaXN0KTsKLQotICAgIC8v
IENyZWF0ZSBhIHJldmVyc2UgbG9va3VwLgotICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIq
LCBpbnQ+IGxvb2t1cDsKLQotICAgIGlmIChuZWdaT3JkZXJMaXN0KSB7Ci0gICAgICAgIGludCBz
dGFja2luZ09yZGVySW5kZXggPSAtMTsKLSAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVnWk9y
ZGVyTGlzdC0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJyZW50TGF5ZXIgPSBuZWdaT3Jk
ZXJMaXN0LT5hdChsaXN0U2l6ZSAtIGkgLSAxKTsKLSAgICAgICAgICAgIGlmICghY3VycmVudExh
eWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgbG9va3VwLnNldChjdXJyZW50TGF5ZXIsIHN0YWNraW5nT3JkZXJJbmRleC0tKTsK
Ky8vIEZpbmFsbHkgaW4gZXhhbXBsZSAoNCksIHdlIHdvdWxkIG1hdGNoICd4eEFDJyBmcm9tIHRo
ZSBsZWZ0LCB0aGVuIHN0b3AKKy8vIHNpbmNlIHdlIGhpdCAnQycuIFRoZW4gd2Ugd291bGQgbWF0
Y2ggJ3gnIGZyb20gdGhlIHJpZ2h0LCBhbmQgbWlzbWF0Y2gKKy8vIG9uICcrJyBhbmQgJ0MnLiBT
aW5jZSB3ZSdyZSBhdCAnQycgb24gdGhlIHpPcmRlckxpc3RBZnRlclByb21vdGUsIHdlCisvLyBj
b25jbHVkZSB0aGF0IGFsbCB0aGUgY2hpbGRyZW4gYXJlIGNvbnRpZ3VvdXMuIFNpbmNlIHRoZXJl
IGFyZSBubworLy8gbmVnYXRpdmUgei1vcmRlciBjaGlsZHJlbiwgYSBiYWNrZ3JvdW5kIGxheWVy
IGlzIGlycmVsZXZhbnQgaW4gdGhpcyBjYXNlLgorLy8gV2Ugd2lsbCBvcHQgaW4sIGtlZXBpbmcg
cGFpbnQgb3JkZXIgY29uc3RhbnQuCitzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJMaXN0c0JlZm9y
ZUFuZEFmdGVyUHJvbW90ZShjb25zdCBSZW5kZXJMYXllciogY3VycmVudExheWVyLAorICAgIGNv
bnN0IFZlY3RvcjxSZW5kZXJMYXllcio+KiBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwKKyAg
ICBjb25zdCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGUs
CisgICAgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3RBZnRlclByb21v
dGUsCisgICAgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3RBZnRlclBy
b21vdGUsCisgICAgY29uc3Qgc2l6ZV90IHNpemVCZWZvcmVQcm9tb3RlLAorICAgIGNvbnN0IHNp
emVfdCBzaXplQWZ0ZXJQcm9tb3RlLAorICAgIGNvbnN0IFN0YWNraW5nT3JkZXJEaXJlY3Rpb24g
ZGlyZWN0aW9uKQoreworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplQmVm
b3JlUHJvbW90ZSAmJiBpbmRleCA8IHNpemVBZnRlclByb21vdGU7IGluZGV4KyspIHsKKyAgICAg
ICAgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyQmVmb3JlUHJvbW90ZSA9IGdldFN0YWNraW5nT3Jk
ZXJFbGVtZW50QXQocG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUsIG5lZ1pPcmRlckxpc3RCZWZv
cmVQcm9tb3RlLCBkaXJlY3Rpb24sIGluZGV4KTsKKyAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIq
IGxheWVyQWZ0ZXJQcm9tb3RlID0gZ2V0U3RhY2tpbmdPcmRlckVsZW1lbnRBdChwb3NaT3JkZXJM
aXN0QWZ0ZXJQcm9tb3RlLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLCBkaXJlY3Rpb24sIGlu
ZGV4KTsKKworICAgICAgICBpZiAobGF5ZXJCZWZvcmVQcm9tb3RlICE9IGxheWVyQWZ0ZXJQcm9t
b3RlKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGEgbWlzbWF0Y2gsIHRoZSBvbmx5IHNp
dHVhdGlvbiB3aGVyZSB3ZSBoYXZlbid0CisgICAgICAgICAgICAvLyBuZWNlc3NhcmlseSBjaGFu
Z2VkIHBhaW50IG9yZGVyIHlldCBpcyBpZiBsYXllckFmdGVyUHJvbW90ZQorICAgICAgICAgICAg
Ly8gaXMgY3VycmVudExheWVyLgorICAgICAgICAgICAgaWYgKGxheWVyQWZ0ZXJQcm9tb3RlICE9
IGN1cnJlbnRMYXllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIC8vIEFsc28sIGlmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIGJhY2tncm91bmQsIHRoZW4g
YW55CisgICAgICAgICAgICAvLyBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxkcmVuIHdpbGwgZ2V0IGJl
dHdlZW4gdGhlIGJhY2tncm91bmQKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgcmVzdCBvZiB0aGUg
bGF5ZXIuCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZyb21CYWNrZ3JvdW5kICYmIGN1
cnJlbnRMYXllci0+cmVuZGVyZXIoKS0+aGFzQmFja2dyb3VuZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChwb3NaT3JkZXJMaXN0
KSB7Ci0gICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKLSAg
ICAgICAgaW50IHN0YWNraW5nT3JkZXJJbmRleCA9IDE7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1cnJl
bnRMYXllciA9IHBvc1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50
TGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBsb29rdXAuc2V0KGN1cnJlbnRMYXllciwgc3RhY2tpbmdPcmRlckluZGV4Kysp
OwotICAgICAgICB9CisgICAgICAgIC8vIFRvIGNvbXBhcmUgdGhlIHN1Yi1saXN0cyAoYSkgYW5k
IChjKSBmcm9tIHRoZSBjb21tZW50IGFib3ZlLCB3ZSBvbmx5CisgICAgICAgIC8vIG5lZWQgdG8g
bWFyY2ggdW50aWwgd2UgaGl0IHRoZSBjdXJyZW50TGF5ZXIgaW4gdGhlCisgICAgICAgIC8vIHpP
cmRlckxpc3RBZnRlclByb21vdGUgZnJvbSBlYWNoIGRpcmVjdGlvbi4KKyAgICAgICAgaWYgKGxh
eWVyQWZ0ZXJQcm9tb3RlID09IGN1cnJlbnRMYXllcikKKyAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGludCBtaW5JbmRleCA9IDA7Ci0gICAgaW50IG1heEluZGV4ID0gMDsKLSAgICBp
bnQgY291bnQgPSAwOwotICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotICAgIHVwZGF0
ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShsb29rdXAs
IG1pbkluZGV4LCBtYXhJbmRleCwgY291bnQsIGZpcnN0SXRlcmF0aW9uKTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1
b3VzSW5TdGFja2luZ09yZGVyUmVjdXJzaXZlKGNvbnN0IEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5
ZXIqLCBpbnQ+JiBsb29rdXAsIGludCYgbWluSW5kZXgsIGludCYgbWF4SW5kZXgsIGludCYgY291
bnQsIGJvb2wgZmlyc3RJdGVyYXRpb24pCi17Ci0gICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KCkg
JiYgIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAgIGlmIChsb29rdXAuY29udGFpbnModGhpcykp
IHsKLSAgICAgICAgICAgIG1pbkluZGV4ID0gc3RkOjptaW4obWluSW5kZXgsIGxvb2t1cC5nZXQo
dGhpcykpOwotICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgbG9va3Vw
LmdldCh0aGlzKSk7Ci0gICAgICAgICAgICBjb3VudCsrOworLy8gRGV0ZXJtaW5lIHdoZXRoZXIg
dGhlIGN1cnJlbnQgbGF5ZXIgY2FuIGJlIHByb21vdGVkIHRvIGEgc3RhY2tpbmcgY29udGFpbmVy
LAorLy8gZ2l2ZW4gaXRzIGNsb3Nlc3Qgc3RhY2tpbmcgY29udGV4dCBhbmNlc3Rvci4gV2UgZG8g
dGhpcyBieSBjb21wdXRpbmcgd2hhdAorLy8gcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHotb3JkZXIg
bGlzdHMgd291bGQgbG9vayBsaWtlIGJlZm9yZSBhbmQgYWZ0ZXIKKy8vIHByb21vdGlvbiwgYW5k
IGVuc3VyaW5nIHRoYXQgcHJvcGVyIHN0YWNraW5nIG9yZGVyIGlzIHByZXNlcnZlZCBiZXR3ZWVu
IHRoZQorLy8gdHdvIHNldHMgb2YgbGlzdHMuCisvLworLy8gRm9yIG1vcmUgZGV0YWlscyBvbiBo
b3cgdGhlIGxpc3RzIHdpbGwgYmUgY29tcGFyZWQsIHNlZSB0aGUgY29tbWVudCBhbmQKKy8vIGV4
YW1wbGVzIGZvciBjb21wYXJlTGF5ZXJMaXN0c0JlZm9yZUFuZEFmdGVyUHJvbW90ZSgpLgordm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5lcihSZW5kZXJMYXllciog
YW5jZXN0b3JTdGFja2luZ0NvbnRleHQpCit7CisgICAgQVNTRVJUKCFpc1N0YWNraW5nQ29udGV4
dCgpKTsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gZWFybHktb3V0IG9mIHRoaXMgZnVuY3Rpb24g
bW9yZQorICAgIC8vIG9mdGVuIGlmIHdlIG1haW50YWluIGEgZGlydHkgYml0IGZvciB0aGUKKyAg
ICAvLyBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29udGFpbmVyIHByb3BlcnR5CisgICAgLy8g
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk5NjYpCisKKyAgICBP
d25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZTsK
KyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBuZWdaT3JkZXJMaXN0QmVmb3JlUHJv
bW90ZTsKKyAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiBwb3NaT3JkZXJMaXN0QWZ0
ZXJQcm9tb3RlOworICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+IG5lZ1pPcmRlckxp
c3RBZnRlclByb21vdGU7CisKKyAgICBjb2xsZWN0QmVmb3JlQWZ0ZXJQcm9tb3Rpb25aT3JkZXJM
aXN0cyhhbmNlc3RvclN0YWNraW5nQ29udGV4dCwKKyAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9y
ZVByb21vdGUsIG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLAorICAgICAgICBwb3NaT3JkZXJM
aXN0QWZ0ZXJQcm9tb3RlLCBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlKTsKKworICAgIHNpemVf
dCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBwb3NaT3JkZXJMaXN0QmVmb3JlUHJv
bW90ZSA/IHBvc1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNpemVf
dCBuZWdaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUgPSBuZWdaT3JkZXJMaXN0QmVmb3JlUHJv
bW90ZSA/IG5lZ1pPcmRlckxpc3RCZWZvcmVQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNpemVf
dCBwb3NaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IHBvc1pPcmRlckxpc3RBZnRlclByb21v
dGUgPyBwb3NaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAwOworICAgIHNpemVfdCBu
ZWdaT3JkZXJMaXN0U2l6ZUFmdGVyUHJvbW90ZSA9IG5lZ1pPcmRlckxpc3RBZnRlclByb21vdGUg
PyBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlLT5zaXplKCkgOiAwOworCisgICAgY29uc3QgUmVu
ZGVyTGF5ZXIqIHBvc2l0aW9uZWRBbmNlc3RvciA9IHBhcmVudCgpOworICAgIHdoaWxlIChwb3Np
dGlvbmVkQW5jZXN0b3IgJiYgIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3NpdGlvbmVkQW5jZXN0
b3IpICYmICFwb3NpdGlvbmVkQW5jZXN0b3ItPmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAg
IHBvc2l0aW9uZWRBbmNlc3RvciA9IHBvc2l0aW9uZWRBbmNlc3Rvci0+cGFyZW50KCk7CisgICAg
aWYgKHBvc2l0aW9uZWRBbmNlc3RvciAmJiAoIWlzUG9zaXRpb25lZENvbnRhaW5lcihwb3NpdGlv
bmVkQW5jZXN0b3IpIHx8IHBvc2l0aW9uZWRBbmNlc3Rvci0+aXNTdGFja2luZ0NvbnRleHQoKSkp
CisgICAgICAgIHBvc2l0aW9uZWRBbmNlc3RvciA9IDA7CisKKyAgICAvLyBJbnNlcnQgdGhpcyBp
bnRvIHRoZSBwb3NaT3JkZXJpc3RCZWZvcmVQcm9tb3RlIGRpcmVjdGx5IGFmdGVyIHRoZQorICAg
IC8vIHBvc2l0aW9uZWQgYW5jZXN0b3IsIGlmIHRoZXJlIGlzIG9uZS4gT3RoZXJ3aXNlLCBhZGQg
aXQgdG8gdGhlIHZlcnkKKyAgICAvLyBiZWdpbm5pbmcuCisgICAgLy8KKyAgICAvLyBUaGUgY3Vy
cmVudCBsYXllciB3aWxsIGFwcGVhciBpbiB0aGUgei1vcmRlciBsaXN0cyBhZnRlciBwcm9tb3Rp
b24sIHNvCisgICAgLy8gZm9yIGEgbWVhbmluZ2Z1bCBjb21wYXJpc29uLCB3ZSBtdXN0IGluc2Vy
dCBpdCBpbiB0aGUgei1vcmRlciBsaXN0cworICAgIC8vIGJlZm9yZSBwcm9tb3Rpb24gaWYgaXQg
ZG9lcyBub3QgYXBwZWFyIHRoZXJlIGFscmVhZHkuCisgICAgaWYgKCFyZW5kZXJlcigpLT5pc1Bv
c2l0aW9uZWQoKSkgeworICAgICAgICBpZiAoIXBvc2l0aW9uZWRBbmNlc3RvcikgeworICAgICAg
ICAgICAgaWYgKCFwb3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSkKKyAgICAgICAgICAgICAgICBw
b3NaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UmVuZGVyTGF5
ZXIqPigpKTsKKworICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPnByZXBl
bmQodGhpcyk7CisgICAgICAgICAgICBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUrKzsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBwb3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGU7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICBpZiAocG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUtPmF0KGluZGV4KSA9PSBwb3Np
dGlvbmVkQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEJlZm9y
ZVByb21vdGUtPmluc2VydChpbmRleCArIDEsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBw
b3NaT3JkZXJMaXN0U2l6ZUJlZm9yZVByb21vdGUrKzsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaW50
IGNoaWxkTWluSW5kZXggPSAwOwotICAgICAgICBpbnQgY2hpbGRNYXhJbmRleCA9IDA7Ci0gICAg
ICAgIGludCBjaGlsZENvdW50ID0gMDsKLSAgICAgICAgY2hpbGQtPnVwZGF0ZURlc2NlbmRhbnRz
QXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlclJlY3Vyc2l2ZShsb29rdXAsIGNoaWxkTWluSW5k
ZXgsIGNoaWxkTWF4SW5kZXgsIGNoaWxkQ291bnQsIGZhbHNlKTsKLSAgICAgICAgaWYgKGNoaWxk
Q291bnQpIHsKLSAgICAgICAgICAgIGNvdW50ICs9IGNoaWxkQ291bnQ7Ci0gICAgICAgICAgICBt
aW5JbmRleCA9IHN0ZDo6bWluKG1pbkluZGV4LCBjaGlsZE1pbkluZGV4KTsKLSAgICAgICAgICAg
IG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIGNoaWxkTWF4SW5kZXgpOwotICAgICAgICB9
Ci0gICAgfQorICAgIHNpemVfdCBzaXplQmVmb3JlUHJvbW90ZSA9IHBvc1pPcmRlckxpc3RTaXpl
QmVmb3JlUHJvbW90ZSArIG5lZ1pPcmRlckxpc3RTaXplQmVmb3JlUHJvbW90ZTsKKyAgICBzaXpl
X3Qgc2l6ZUFmdGVyUHJvbW90ZSA9IHBvc1pPcmRlckxpc3RTaXplQWZ0ZXJQcm9tb3RlICsgbmVn
Wk9yZGVyTGlzdFNpemVBZnRlclByb21vdGU7CisKKyAgICBib29sIGNhblByb21vdGUgPSBjb21w
YXJlTGF5ZXJMaXN0c0JlZm9yZUFuZEFmdGVyUHJvbW90ZSh0aGlzLCBwb3NaT3JkZXJMaXN0QmVm
b3JlUHJvbW90ZS5nZXQoKSwgbmVnWk9yZGVyTGlzdEJlZm9yZVByb21vdGUuZ2V0KCksCisgICAg
ICAgIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUuZ2V0KCksIG5lZ1pPcmRlckxpc3RBZnRlclBy
b21vdGUuZ2V0KCksCisgICAgICAgIHNpemVCZWZvcmVQcm9tb3RlLCBzaXplQWZ0ZXJQcm9tb3Rl
LCBGcm9tQmFja2dyb3VuZCkKKyAgICAgICAgJiYgY29tcGFyZUxheWVyTGlzdHNCZWZvcmVBbmRB
ZnRlclByb21vdGUodGhpcywgcG9zWk9yZGVyTGlzdEJlZm9yZVByb21vdGUuZ2V0KCksIG5lZ1pP
cmRlckxpc3RCZWZvcmVQcm9tb3RlLmdldCgpLAorICAgICAgICAgICAgcG9zWk9yZGVyTGlzdEFm
dGVyUHJvbW90ZS5nZXQoKSwgbmVnWk9yZGVyTGlzdEFmdGVyUHJvbW90ZS5nZXQoKSwKKyAgICAg
ICAgICAgIHNpemVCZWZvcmVQcm9tb3RlLCBzaXplQWZ0ZXJQcm9tb3RlLCBGcm9tRm9yZWdyb3Vu
ZCk7CiAKLSAgICBpZiAoIWlzU3RhY2tpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgYm9vbCBuZXdW
YWx1ZSA9IG1heEluZGV4IC0gbWluSW5kZXggPT0gY291bnQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgICAgICBib29sIGRpZFVwZGF0ZSA9IG5ld1ZhbHVlICE9IG1fZGVz
Y2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyOworICAgIGJvb2wgZGlkVXBkYXRl
ID0gKGNhblByb21vdGUgIT0gbV9jYW5CZVByb21vdGVkVG9TdGFja2luZ0NvbnRhaW5lcik7CiAj
ZW5kaWYKLSAgICAgICAgbV9kZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXIg
PSBuZXdWYWx1ZTsKKworICAgIG1fY2FuQmVQcm9tb3RlZFRvU3RhY2tpbmdDb250YWluZXIgPSBj
YW5Qcm9tb3RlOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBp
ZiAoZGlkVXBkYXRlKQotICAgICAgICAgICAgdXBkYXRlTmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5n
KCk7CisgICAgaWYgKGRpZFVwZGF0ZSkKKyAgICAgICAgdXBkYXRlTmVlZHNDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7CiAjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2FuQmVTdGFj
a2luZ0NvbnRhaW5lclJlY3Vyc2l2ZWx5KFJlbmRlckxheWVyKiBhbmNlc3RvclN0YWNraW5nQ29u
dGV4dCkKK3sKKyAgICBpZiAodGhpcyAhPSBhbmNlc3RvclN0YWNraW5nQ29udGV4dCkgeworICAg
ICAgICBpZiAoaXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB1cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyKGFuY2VzdG9yU3RhY2tpbmdDb250ZXh0
KTsKKyAgICB9CisKKyAgICBpZiAobV9oYXNWaXNpYmxlRGVzY2VuZGFudCkgeworICAgICAgICBm
b3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSByZWZsZWN0aW9ucy4K
KyAgICAgICAgICAgIGlmICghbV9yZWZsZWN0aW9uIHx8IHJlZmxlY3Rpb25MYXllcigpICE9IGNo
aWxkKQorICAgICAgICAgICAgICAgIGNoaWxkLT51cGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVy
UmVjdXJzaXZlbHkoYW5jZXN0b3JTdGFja2luZ0NvbnRleHQpOworICAgICAgICB9CiAgICAgfQog
fQogCisKIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVSZXBhaW50UmVjdHMoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0cnlN
YXAqIGdlb21ldHJ5TWFwKQogewogICAgIEFTU0VSVCghbV92aXNpYmxlQ29udGVudFN0YXR1c0Rp
cnR5KTsKQEAgLTEwMDMsNyArMTExMiw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmNhbkJlU3RhY2tp
bmdDb250YWluZXIoKSBjb25zdAogICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCgpIHx8ICFzdGFj
a2luZ0NvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBtX2Rl
c2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcjsKKyAgICByZXR1cm4gbV9jYW5C
ZVByb21vdGVkVG9TdGFja2luZ0NvbnRhaW5lcjsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6c2V0
SGFzVmlzaWJsZUNvbnRlbnQoKQpAQCAtMTMyMCwxMiArMTQyOSw2IEBAIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6c3RhY2tpbmdDb250YWluZXIoKSBjb25zdAogICAgIHJldHVybiBsYXllcjsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIGlzUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXll
ciogbGF5ZXIpCi17Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5ZXJSZW5kZXJlciA9
IGxheWVyLT5yZW5kZXJlcigpOwotICAgIHJldHVybiBsYXllci0+aXNSb290TGF5ZXIoKSB8fCBs
YXllclJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXllci0+aGFzVHJhbnNmb3JtKCk7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJM
YXllciogbGF5ZXIpCiB7CiAgICAgcmV0dXJuIGxheWVyLT5pc1Jvb3RMYXllcigpIHx8IGxheWVy
LT5oYXNUcmFuc2Zvcm0oKTsKQEAgLTE5OTYsNiArMjA5OSwxOSBAQCBib29sIFJlbmRlckxheWVy
OjpuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAogICAgIHJldHVybiBtX25lZWRzQ29t
cG9zaXRlZFNjcm9sbGluZzsKIH0KIAordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlSXNOb3JtYWxG
bG93T25seSgpCit7CisgICAgYm9vbCBpc05vcm1hbEZsb3dPbmx5ID0gc2hvdWxkQmVOb3JtYWxG
bG93T25seSgpOworICAgIGlmIChpc05vcm1hbEZsb3dPbmx5ICE9IG1faXNOb3JtYWxGbG93T25s
eSkgeworICAgICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBpc05vcm1hbEZsb3dPbmx5OworICAg
ICAgICBSZW5kZXJMYXllciogcCA9IHBhcmVudCgpOworICAgICAgICBpZiAocCkKKyAgICAgICAg
ICAgIHAtPmRpcnR5Tm9ybWFsRmxvd0xpc3QoKTsKKyAgICAgICAgZGlydHlTdGFja2luZ0NvbnRh
aW5lclpPcmRlckxpc3RzKCk7CisgICAgfQorfQorCisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygpCiB7CiAgICAgYm9vbCBvbGROZWVkc0NvbXBvc2l0
ZWRTY3JvbGxpbmcgPSBtX25lZWRzQ29tcG9zaXRlZFNjcm9sbGluZzsKQEAgLTIwMTYsNiArMjEz
Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZygp
CiAgICAgfQogCiAgICAgaWYgKG9sZE5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZyAhPSBtX25lZWRz
Q29tcG9zaXRlZFNjcm9sbGluZykgeworICAgICAgICB1cGRhdGVJc05vcm1hbEZsb3dPbmx5KCk7
CiAgICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CiAgICAgICAgIGlmIChpc1N0YWNr
aW5nQ29udGFpbmVyKCkpCiAgICAgICAgICAgICBkaXJ0eVpPcmRlckxpc3RzKCk7CkBAIC01NjQy
LDcgKzU3NTksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZWJ1aWxkWk9yZGVyTGlzdHMoKQogICAg
IG1fek9yZGVyTGlzdHNEaXJ0eSA9IGZhbHNlOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpyZWJ1
aWxkWk9yZGVyTGlzdHMoQ29sbGVjdExheWVyc0JlaGF2aW9yIGJlaGF2aW9yLCBPd25QdHI8VmVj
dG9yPFJlbmRlckxheWVyKj4gPiYgcG9zWk9yZGVyTGlzdCwgT3duUHRyPFZlY3RvcjxSZW5kZXJM
YXllcio+ID4mIG5lZ1pPcmRlckxpc3QpCit2b2lkIFJlbmRlckxheWVyOjpyZWJ1aWxkWk9yZGVy
TGlzdHMoQ29sbGVjdExheWVyc0JlaGF2aW9yIGJlaGF2aW9yLCBPd25QdHI8VmVjdG9yPFJlbmRl
ckxheWVyKj4gPiYgcG9zWk9yZGVyTGlzdCwgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4m
IG5lZ1pPcmRlckxpc3QsIGNvbnN0IFJlbmRlckxheWVyKiBsYXllclRvRm9yY2VBc1N0YWNraW5n
Q29udGV4dCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgYm9vbCBp
bmNsdWRlSGlkZGVuTGF5ZXJzID0gY29tcG9zaXRvcigpLT5pbkNvbXBvc2l0aW5nTW9kZSgpOwpA
QCAtNTY1MSw3ICs1NzY4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVidWlsZFpPcmRlckxpc3Rz
KENvbGxlY3RMYXllcnNCZWhhdmlvciBiZWhhdmlvciwgT3duUHRyPFZlY3QKICNlbmRpZgogICAg
IGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgaWYgKCFtX3JlZmxlY3Rpb24gfHwgcmVmbGVj
dGlvbkxheWVyKCkgIT0gY2hpbGQpCi0gICAgICAgICAgICBjaGlsZC0+Y29sbGVjdExheWVycyhp
bmNsdWRlSGlkZGVuTGF5ZXJzLCBiZWhhdmlvciwgcG9zWk9yZGVyTGlzdCwgbmVnWk9yZGVyTGlz
dCk7CisgICAgICAgICAgICBjaGlsZC0+Y29sbGVjdExheWVycyhpbmNsdWRlSGlkZGVuTGF5ZXJz
LCBiZWhhdmlvciwgcG9zWk9yZGVyTGlzdCwgbmVnWk9yZGVyTGlzdCwgbGF5ZXJUb0ZvcmNlQXNT
dGFja2luZ0NvbnRleHQpOwogCiAgICAgLy8gU29ydCB0aGUgdHdvIGxpc3RzLgogICAgIGlmIChw
b3NaT3JkZXJMaXN0KQpAQCAtNTY5Niw3ICs1ODEzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTm9ybWFsRmxvd0xpc3QoKQogICAgIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSA9IGZhbHNlOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxh
eWVycywgQ29sbGVjdExheWVyc0JlaGF2aW9yIGJlaGF2aW9yLCBPd25QdHI8VmVjdG9yPFJlbmRl
ckxheWVyKj4gPiYgcG9zQnVmZmVyLCBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiYgbmVn
QnVmZmVyKQordm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhib29sIGluY2x1ZGVIaWRk
ZW5MYXllcnMsIENvbGxlY3RMYXllcnNCZWhhdmlvciBiZWhhdmlvciwgT3duUHRyPFZlY3RvcjxS
ZW5kZXJMYXllcio+ID4mIHBvc0J1ZmZlciwgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4m
IG5lZ0J1ZmZlciwgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyVG9Gb3JjZUFzU3RhY2tpbmdDb250
ZXh0KQogewogI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKICAgICBpZiAoaXNJblRvcExheWVy
KCkpCkBAIC01NzA1LDcgKzU4MjIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJz
KGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgQ29sbGVjdExheWVyc0JlaGF2aW9yCiAKICAgICB1
cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKIAotICAgIGJvb2wgaXNTdGFja2luZyA9
IGJlaGF2aW9yID09IFN0b3BBdFN0YWNraW5nQ29udGV4dHMgPyBpc1N0YWNraW5nQ29udGV4dCgp
IDogaXNTdGFja2luZ0NvbnRhaW5lcigpOworICAgIGJvb2wgaXNTdGFja2luZyA9ICh0aGlzID09
IGxheWVyVG9Gb3JjZUFzU3RhY2tpbmdDb250ZXh0KSB8fCAoYmVoYXZpb3IgPT0gU3RvcEF0U3Rh
Y2tpbmdDb250ZXh0cyA/IGlzU3RhY2tpbmdDb250ZXh0KCkgOiBpc1N0YWNraW5nQ29udGFpbmVy
KCkpOwogICAgIC8vIE92ZXJmbG93IGxheWVycyBhcmUganVzdCBwYWludGVkIGJ5IHRoZWlyIGVu
Y2xvc2luZyBsYXllcnMsIHNvIHRoZXkgZG9uJ3QgZ2V0IHB1dCBpbiB6b3JkZXIgbGlzdHMuCiAg
ICAgYm9vbCBpbmNsdWRlSGlkZGVuTGF5ZXIgPSBpbmNsdWRlSGlkZGVuTGF5ZXJzIHx8IChtX2hh
c1Zpc2libGVDb250ZW50IHx8IChtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmIGlzU3RhY2tpbmcp
KTsKICAgICBpZiAoaW5jbHVkZUhpZGRlbkxheWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkgJiYg
IWlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7CkBAIC01NzI2LDE0ICs1ODQzLDE0IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RMYXllcnMoYm9vbCBpbmNsdWRlSGlkZGVuTGF5ZXJz
LCBDb2xsZWN0TGF5ZXJzQmVoYXZpb3IKICAgICAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgICAgICAvLyBJZ25vcmUgcmVmbGVjdGlvbnMuCiAgICAgICAgICAgICBpZiAoIW1fcmVm
bGVjdGlvbiB8fCByZWZsZWN0aW9uTGF5ZXIoKSAhPSBjaGlsZCkKLSAgICAgICAgICAgICAgICBj
aGlsZC0+Y29sbGVjdExheWVycyhpbmNsdWRlSGlkZGVuTGF5ZXJzLCBiZWhhdmlvciwgcG9zQnVm
ZmVyLCBuZWdCdWZmZXIpOworICAgICAgICAgICAgICAgIGNoaWxkLT5jb2xsZWN0TGF5ZXJzKGlu
Y2x1ZGVIaWRkZW5MYXllcnMsIGJlaGF2aW9yLCBwb3NCdWZmZXIsIG5lZ0J1ZmZlciwgbGF5ZXJU
b0ZvcmNlQXNTdGFja2luZ0NvbnRleHQpOwogICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKQogewotICAgIGJvb2wgc2hvdWxk
VXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyID0gaXNTdGFja2lu
Z0NvbnRleHQoKSAmJiAobV96T3JkZXJMaXN0c0RpcnR5IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0
eSk7CisgICAgYm9vbCBzaG91bGRVcGRhdGVDYW5CZVN0YWNraW5nQ29udGFpbmVyID0gYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpICYmIGlzU3RhY2tpbmdD
b250ZXh0KCkgJiYgKG1fek9yZGVyTGlzdHNEaXJ0eSB8fCBtX25vcm1hbEZsb3dMaXN0RGlydHkp
OwogICAgIHVwZGF0ZVpPcmRlckxpc3RzKCk7CiAgICAgdXBkYXRlTm9ybWFsRmxvd0xpc3QoKTsK
IApAQCAtNTc0Miw4ICs1ODU5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyTGlz
dHNJZk5lZWRlZCgpCiAgICAgICAgIHJlZmxlY3Rpb25MYXllci0+dXBkYXRlTm9ybWFsRmxvd0xp
c3QoKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkVXBkYXRlRGVzY2VuZGFudHNBcmVDb250aWd1
b3VzSW5TdGFja2luZ09yZGVyKSB7Ci0gICAgICAgIHVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGln
dW91c0luU3RhY2tpbmdPcmRlcigpOworICAgIGlmIChzaG91bGRVcGRhdGVDYW5CZVN0YWNraW5n
Q29udGFpbmVyKSB7CisgICAgICAgIC8vIGNhbGwgVXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRhaW5l
ciBmb3IgYWxsIGRlc2NlbmRhbnRzLAorICAgICAgICAvLyBwYXNzaW5nIHNlbGYgaW4gYXMgYW5j
ZXN0b3Igc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgdXBkYXRlQ2FuQmVTdGFja2luZ0NvbnRh
aW5lclJlY3Vyc2l2ZWx5KHRoaXMpOworCiAgICAgICAgIC8vIFRoZSBhYm92ZSBmdW5jdGlvbiBj
YW4gY2F1c2UgdXMgdG8gdXBkYXRlIG1fbmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAg
IC8vIGFuZCBkaXJ0eSBvdXIgbGF5ZXIgbGlzdHMuIFJlZnJlc2ggdGhlbSBpZiBuZWNlc3Nhcnku
CiAgICAgICAgIHVwZGF0ZVpPcmRlckxpc3RzKCk7CkBAIC01OTMwLDcgKzYwNTAsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTdGFja2luZ0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkUwogICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQgPSB0aGlzLT5p
c1N0YWNraW5nQ29udGV4dCgpOwogICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCAhPSB3YXNTdGFj
a2luZ0NvbnRleHQpIHsKICAgICAgICAgZGlydHlTdGFja2luZ0NvbnRhaW5lclpPcmRlckxpc3Rz
KCk7Ci0gICAgICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCkKKyAgICAgICAgaWYgKGlzU3RhY2tp
bmdDb250YWluZXIoKSkKICAgICAgICAgICAgIGRpcnR5Wk9yZGVyTGlzdHMoKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgY2xlYXJaT3JkZXJMaXN0cygpOwpAQCAtNTk0MSw3ICs2MDYxLDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFu
Z2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFMKICAgICAvLyBsaWtlbHkgYmUgZm9sZGVkIGFsb25n
IHdpdGggdGhlIHJlc3QuCiAgICAgaWYgKG9sZFN0eWxlLT56SW5kZXgoKSAhPSByZW5kZXJlcigp
LT5zdHlsZSgpLT56SW5kZXgoKSB8fCBvbGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJlbmRlcmVy
KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSkgewogICAgICAgICBkaXJ0eVN0YWNraW5nQ29udGFp
bmVyWk9yZGVyTGlzdHMoKTsKLSAgICAgICAgaWYgKGlzU3RhY2tpbmdDb250ZXh0KQorICAgICAg
ICBpZiAoaXNTdGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICAgICAgZGlydHlaT3JkZXJMaXN0
cygpOwogICAgIH0KIH0KQEAgLTYwMzAsMTQgKzYxNTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIAog
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAgIGJvb2wgaXNOb3JtYWxGbG93T25seSA9IHNob3Vs
ZEJlTm9ybWFsRmxvd09ubHkoKTsKLSAgICBpZiAoaXNOb3JtYWxGbG93T25seSAhPSBtX2lzTm9y
bWFsRmxvd09ubHkpIHsKLSAgICAgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0gaXNOb3JtYWxGbG93
T25seTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHAgPSBwYXJlbnQoKTsKLSAgICAgICAgaWYgKHAp
Ci0gICAgICAgICAgICBwLT5kaXJ0eU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAgICAgIGRpcnR5U3Rh
Y2tpbmdDb250YWluZXJaT3JkZXJMaXN0cygpOwotICAgIH0KKyAgICB1cGRhdGVJc05vcm1hbEZs
b3dPbmx5KCk7CiAKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0g
T01BUlFVRUUgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTU5P
TkUgJiYgcmVuZGVyZXIoKS0+aXNCb3goKSkgewogICAgICAgICBpZiAoIW1fbWFycXVlZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggOGRjODk5OWMyMjNhYzkxYjVl
NjY5YzA2NGUzODJjYWZlM2UyMzdjOS4uOGNjMmI4YjE1MTk4MjEwMDA3ZGJjZDRjMTg2YmQ3ZGUy
MjJmMTkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTg0OSw3
ICs4NDksOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVaT3JkZXJMaXN0cygpOwogICAg
IHZvaWQgcmVidWlsZFpPcmRlckxpc3RzKCk7Ci0gICAgdm9pZCByZWJ1aWxkWk9yZGVyTGlzdHMo
Q29sbGVjdExheWVyc0JlaGF2aW9yLCBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiYsIE93
blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+Jik7CisgICAgLy8gU2VlIHRoZSBjb21tZW50IGZv
ciBjb2xsZWN0TGF5ZXJzIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAvLyBsYXllclRv
Rm9yY2VBc1N0YWNraW5nQ29udGV4dCBwYXJhbWV0ZXIuCisgICAgdm9pZCByZWJ1aWxkWk9yZGVy
TGlzdHMoQ29sbGVjdExheWVyc0JlaGF2aW9yLCBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4g
PiYsIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiwgY29uc3QgUmVuZGVyTGF5ZXIqIGxh
eWVyVG9Gb3JjZUFzU3RhY2tpbmdDb250ZXh0ID0gMCk7CiAgICAgdm9pZCBjbGVhclpPcmRlckxp
c3RzKCk7CiAKICAgICB2b2lkIHVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CkBAIC04NjIsOCArODY0
LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNTZWxmUGFpbnRp
bmdMYXllckRlc2NlbmRhbnRTdGF0dXMoKTsKIAogICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlRGVz
Y2VuZGFudHNBcmVDb250aWd1b3VzSW5TdGFja2luZ09yZGVyKCk7Ci0gICAgdm9pZCB1cGRhdGVE
ZXNjZW5kYW50c0FyZUNvbnRpZ3VvdXNJblN0YWNraW5nT3JkZXJSZWN1cnNpdmUoY29uc3QgSGFz
aE1hcDxjb25zdCBSZW5kZXJMYXllciosIGludD4mLCBpbnQmIG1pbkluZGV4LCBpbnQmIG1heElu
ZGV4LCBpbnQmIGNvdW50LCBib29sIGZpcnN0SXRlcmF0aW9uKTsKKworICAgIHZvaWQgY29sbGVj
dEJlZm9yZUFmdGVyUHJvbW90aW9uWk9yZGVyTGlzdHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yU3Rh
Y2tpbmdDb250ZXh0LAorICAgICAgICBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiYgcG9z
Wk9yZGVyTGlzdEJlZm9yZVByb21vdGUsCisgICAgICAgIE93blB0cjxWZWN0b3I8UmVuZGVyTGF5
ZXIqPiA+JiBuZWdaT3JkZXJMaXN0QmVmb3JlUHJvbW90ZSwKKyAgICAgICAgT3duUHRyPFZlY3Rv
cjxSZW5kZXJMYXllcio+ID4mIHBvc1pPcmRlckxpc3RBZnRlclByb21vdGUsCisgICAgICAgIE93
blB0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPiA+JiBuZWdaT3JkZXJMaXN0QWZ0ZXJQcm9tb3RlKTsK
KyAgICB2b2lkIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXIoUmVuZGVyTGF5ZXIqKTsKKyAg
ICB2b2lkIHVwZGF0ZUNhbkJlU3RhY2tpbmdDb250YWluZXJSZWN1cnNpdmVseShSZW5kZXJMYXll
ciopOwogCiAgICAgdm9pZCBjb21wdXRlUmVwYWludFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiA9IDAp
OwogICAgIHZvaWQgY29tcHV0ZVJlcGFpbnRSZWN0c0luY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CkBA
IC04ODUsNiArODkzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpbkhh
c091dE9mRmxvd1Bvc2l0aW9uZWREZXNjZW5kYW50U3RhdHVzKCk7CiAgICAgdm9pZCB1cGRhdGVP
dXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKKyAgICB2
b2lkIHVwZGF0ZUlzTm9ybWFsRmxvd09ubHkoKTsKICAgICB2b2lkIHVwZGF0ZU5lZWRzQ29tcG9z
aXRlZFNjcm9sbGluZygpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBj
aGFuZ2VkLgpAQCAtOTIwLDcgKzkyOSwxMSBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgcmVu
ZGVyQm94WCgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlckJveExvY2F0aW9uKCkueCgpOyB9CiAgICAg
TGF5b3V0VW5pdCByZW5kZXJCb3hZKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyQm94TG9jYXRpb24o
KS55KCk7IH0KIAotICAgIHZvaWQgY29sbGVjdExheWVycyhib29sIGluY2x1ZGVIaWRkZW5MYXll
cnMsIENvbGxlY3RMYXllcnNCZWhhdmlvciwgT3duUHRyPFZlY3RvcjxSZW5kZXJMYXllcio+ID4m
LCBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiYpOworICAgIC8vIGxheWVyVG9Gb3JjZUFz
U3RhY2tpbmdDb250ZXh0IGFsbG93cyB1cyB0byBidWlsZCBwcmUtcHJvbW90aW9uIGFuZAorICAg
IC8vIHBvc3QtcHJvbW90aW9uIGxheWVyIGxpc3RzLCBieSBhbGxvd2luZyB1cyB0byB0cmVhdCBh
IGxheWVyIGFzIGlmIGl0IGlzIGEKKyAgICAvLyBzdGFja2luZyBjb250ZXh0LCB3aXRob3V0IGFk
ZGluZyBhIG5ldyBtZW1iZXIgdG8gUmVuZGVyTGF5ZXIgb3IgbW9kaWZ5aW5nCisgICAgLy8gdGhl
IHN0eWxlICh3aGljaCBjb3VsZCBjYXVzZSBleHRyYSBhbGxvY2F0aW9ucykuCisgICAgdm9pZCBj
b2xsZWN0TGF5ZXJzKGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgQ29sbGVjdExheWVyc0JlaGF2
aW9yLCBPd25QdHI8VmVjdG9yPFJlbmRlckxheWVyKj4gPiYsIE93blB0cjxWZWN0b3I8UmVuZGVy
TGF5ZXIqPiA+JiwgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyVG9Gb3JjZUFzU3RhY2tpbmdDb250
ZXh0ID0gMCk7CiAKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nQW5kTGF5ZXJMaXN0c0lmTmVl
ZGVkKCk7CiAKQEAgLTExNjQsNyArMTE3Nyw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBJZiB0aGlz
IGlzIHRydWUsIHRoZW4gbm8gbm9uLWRlc2NlbmRhbnQgYXBwZWFycyBiZXR3ZWVuIGFueSBvZiBv
dXIKICAgICAvLyBkZXNjZW5kYW50cyBpbiBzdGFja2luZyBvcmRlci4gVGhpcyBpcyBvbmUgb2Yg
dGhlIHJlcXVpcmVtZW50cyBvZiBiZWluZwogICAgIC8vIGFibGUgdG8gc2FmZWx5IGJlY29tZSBh
IHN0YWNraW5nIGNvbnRleHQuCi0gICAgYm9vbCBtX2Rlc2NlbmRhbnRzQXJlQ29udGlndW91c0lu
U3RhY2tpbmdPcmRlciA6IDE7CisgICAgYm9vbCBtX2NhbkJlUHJvbW90ZWRUb1N0YWNraW5nQ29u
dGFpbmVyIDogMTsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1Jvb3RMYXllciA6IDE7CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAzNzA3ODcwOWY4ZjVjOWY2OGQxNDVmNDFjNDJmNGYwMDRmOWY5ODdhLi4yYjdjN2MwMGIzMTBk
MTU0OTExNjdjNWU3ZjRmYWFhMjlmMzdmM2U3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTMt
MDMtMDggIEdsZW5uIEhhcnRtYW5uICA8aGFydG1hbm5nQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBTaW1wbGlmeSBsb2dpYyBmb3IgYXV0b21hdGljYWxseSBvcHRpbmcgaW50byBjb21wb3NpdGVk
IHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA5MzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2Ugc2ltcGxpZnkgdGhlIGxvZ2ljIGZvciBhdXRvbWF0aWNhbGx5IG9wdGluZyBpbnRvIGNv
bXBvc2l0ZWQKKyAgICAgICAgc2Nyb2xsaW5nIGJ5IGdlbmVyYXRpbmcgdHdvIHNldHMgb2Ygei1v
cmRlciBsaXN0cywgZmlyc3QgZm9yY2luZyBhCisgICAgICAgIGxheWVyIHRvIG5vdCBwcm9tb3Rl
LCB0aGVuIGZvcmNpbmcgaXQgdG8gcHJvbW90ZSB0aGUgc2Vjb25kIHRpbWUuIFRoZQorICAgICAg
ICB0d28gc2V0cyBvZiBsaXN0cyBjYW4gYmUgcmVsYXRpdmVseSBlYXNpbHkgY29tcGFyZWQgZm9y
IGFueSBwb3NzaWJsZQorICAgICAgICBjaGFuZ2UgaW4gc3RhY2tpbmcgb3JkZXIuIElmIHRoZSB0
d28gbGlzdHMgYXJlIGluIGZhY3QgdGhlIHNhbWUsIHRoZW4KKyAgICAgICAgd2Uga25vdyBpdCBp
cyBzYWZlIHRvIHByb21vdGUgdGhlIGxheWVyIHRvIGJlIGEgc3RhY2tpbmcgY29udGFpbmVyLiBU
aGlzCisgICAgICAgIHNob3VsZCBiZSBtb3JlIGludHVpdGl2ZSBhbmQgbW9yZSByb2J1c3QgdGhh
biB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIGNvbXBvc2l0aW5nL292
ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGNvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0
LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbDoKKyAgICAgICAgKiBjb21wb3NpdGluZy9v
dmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlvbmVkLWFuY2VzdG9y
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0
LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEz
LTAzLTA3ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZp
eCBwYWludGluZyBwaGFzZXMgZm9yIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNv
bXBvc2l0ZWQtc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5n
L292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctZXhw
ZWN0ZWQudHh0CmluZGV4IGRlZWY1MTUwMmI3OWRkMDRkYTQ3OGQ1MWVmMDI0OTcxOGE2NDkyNzgu
LjhiMTM3ODkxNzkxZmU5NjkyN2FkNzhlNjRiMGFhZDdiZGVkMDhiZGMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29t
cG9zaXRlZC1zY3JvbGxpbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0
aW5nL292ZXJmbG93L2F1dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmct
ZXhwZWN0ZWQudHh0CkBAIC0xLDEyNyArMSBAQAotSXRlcmF0aW9uIDA6IFBhc3NlZAotSXRlcmF0
aW9uIDAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxOiBQYXNzZWQKLUl0ZXJhdGlvbiAxLCBsYXll
ciB0cmVlCi1JdGVyYXRpb24gMjogUGFzc2VkCi1JdGVyYXRpb24gMiwgbGF5ZXIgdHJlZQotSXRl
cmF0aW9uIDM6IFBhc3NlZAotSXRlcmF0aW9uIDMsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0OiBQ
YXNzZWQKLUl0ZXJhdGlvbiA0LCBsYXllciB0cmVlCi1JdGVyYXRpb24gNTogUGFzc2VkCi1JdGVy
YXRpb24gNSwgbGF5ZXIgdHJlZQotSXRlcmF0aW9uIDY6IFBhc3NlZAotSXRlcmF0aW9uIDYsIGxh
eWVyIHRyZWUKLUl0ZXJhdGlvbiA3OiBQYXNzZWQKLUl0ZXJhdGlvbiA3LCBsYXllciB0cmVlCi1J
dGVyYXRpb24gODogUGFzc2VkCi1JdGVyYXRpb24gOCwgbm8gbGF5ZXIgdHJlZQotSXRlcmF0aW9u
IDk6IFBhc3NlZAotSXRlcmF0aW9uIDksIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxMDogUGFz
c2VkCi1JdGVyYXRpb24gMTAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxMTogUGFzc2VkCi1JdGVy
YXRpb24gMTEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxMjogUGFzc2VkCi1JdGVyYXRpb24gMTIs
IG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxMzogUGFzc2VkCi1JdGVyYXRpb24gMTMsIG5vIGxh
eWVyIHRyZWUKLUl0ZXJhdGlvbiAxNDogUGFzc2VkCi1JdGVyYXRpb24gMTQsIG5vIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiAxNTogUGFzc2VkCi1JdGVyYXRpb24gMTUsIG5vIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiAxNjogUGFzc2VkCi1JdGVyYXRpb24gMTYsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biAxNzogUGFzc2VkCi1JdGVyYXRpb24gMTcsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxODog
UGFzc2VkCi1JdGVyYXRpb24gMTgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAxOTogUGFzc2Vk
Ci1JdGVyYXRpb24gMTksIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyMDogUGFzc2VkCi1JdGVy
YXRpb24gMjAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyMTogUGFzc2VkCi1JdGVyYXRpb24gMjEs
IGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyMjogUGFzc2VkCi1JdGVyYXRpb24gMjIsIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiAyMzogUGFzc2VkCi1JdGVyYXRpb24gMjMsIGxheWVyIHRyZWUKLUl0ZXJh
dGlvbiAyNDogUGFzc2VkCi1JdGVyYXRpb24gMjQsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyNTog
UGFzc2VkCi1JdGVyYXRpb24gMjUsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyNjogUGFzc2VkCi1J
dGVyYXRpb24gMjYsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyNzogUGFzc2VkCi1JdGVyYXRpb24g
MjcsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAyODogUGFzc2VkCi1JdGVyYXRpb24gMjgsIGxheWVy
IHRyZWUKLUl0ZXJhdGlvbiAyOTogUGFzc2VkCi1JdGVyYXRpb24gMjksIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiAzMDogUGFzc2VkCi1JdGVyYXRpb24gMzAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAz
MTogUGFzc2VkCi1JdGVyYXRpb24gMzEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzMjogUGFzc2Vk
Ci1JdGVyYXRpb24gMzIsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzMzogUGFzc2VkCi1JdGVyYXRp
b24gMzMsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzNDogUGFzc2VkCi1JdGVyYXRpb24gMzQsIG5v
IGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzNTogUGFzc2VkCi1JdGVyYXRpb24gMzUsIG5vIGxheWVy
IHRyZWUKLUl0ZXJhdGlvbiAzNjogUGFzc2VkCi1JdGVyYXRpb24gMzYsIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiAzNzogUGFzc2VkCi1JdGVyYXRpb24gMzcsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAz
ODogUGFzc2VkCi1JdGVyYXRpb24gMzgsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiAzOTogUGFz
c2VkCi1JdGVyYXRpb24gMzksIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0MDogUGFzc2VkCi1J
dGVyYXRpb24gNDAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0MTogUGFzc2VkCi1JdGVyYXRpb24g
NDEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0MjogUGFzc2VkCi1JdGVyYXRpb24gNDIsIGxheWVy
IHRyZWUKLUl0ZXJhdGlvbiA0MzogUGFzc2VkCi1JdGVyYXRpb24gNDMsIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiA0NDogUGFzc2VkCi1JdGVyYXRpb24gNDQsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0
NTogUGFzc2VkCi1JdGVyYXRpb24gNDUsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0NjogUGFzc2Vk
Ci1JdGVyYXRpb24gNDYsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0NzogUGFzc2VkCi1JdGVyYXRp
b24gNDcsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0ODogUGFzc2VkCi1JdGVyYXRpb24gNDgsIG5v
IGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA0OTogUGFzc2VkCi1JdGVyYXRpb24gNDksIG5vIGxheWVy
IHRyZWUKLUl0ZXJhdGlvbiA1MDogUGFzc2VkCi1JdGVyYXRpb24gNTAsIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiA1MTogUGFzc2VkCi1JdGVyYXRpb24gNTEsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1
MjogUGFzc2VkCi1JdGVyYXRpb24gNTIsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1MzogUGFzc2Vk
Ci1JdGVyYXRpb24gNTMsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1NDogUGFzc2VkCi1JdGVyYXRp
b24gNTQsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1NTogUGFzc2VkCi1JdGVyYXRpb24gNTUs
IG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA1NjogUGFzc2VkCi1JdGVyYXRpb24gNTYsIG5vIGxh
eWVyIHRyZWUKLUl0ZXJhdGlvbiA1NzogUGFzc2VkCi1JdGVyYXRpb24gNTcsIG5vIGxheWVyIHRy
ZWUKLUl0ZXJhdGlvbiA1ODogUGFzc2VkCi1JdGVyYXRpb24gNTgsIG5vIGxheWVyIHRyZWUKLUl0
ZXJhdGlvbiA1OTogUGFzc2VkCi1JdGVyYXRpb24gNTksIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlv
biA2MDogUGFzc2VkCi1JdGVyYXRpb24gNjAsIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA2MTogUGFz
c2VkCi1JdGVyYXRpb24gNjEsIG5vIGxheWVyIHRyZWUKLUl0ZXJhdGlvbiA2MjogUGFzc2VkCi1J
dGVyYXRpb24gNjIsIGxheWVyIHRyZWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9z
aXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGlu
Zy5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvYXV0b21hdGljYWxseS1v
cHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy5odG1sCmluZGV4IDFlNjdiNWRkNzhmYjcxMWJi
ZTE0YzE2NjE4ODMyZTYxMWRhZmFmNDAuLmMwMjI2YjgwODdkYjc5YmZlMTUyNDcxNDg4ZTA5ZGY0
N2U5MTVhZjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L2F1
dG9tYXRpY2FsbHktb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmcuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9vdmVyZmxvdy9hdXRvbWF0aWNhbGx5LW9wdC1pbnRvLWNvbXBv
c2l0ZWQtc2Nyb2xsaW5nLmh0bWwKQEAgLTEyLDEyICsxMiwxNCBAQAogICAgICAgb3ZlcmZsb3c6
IHNjcm9sbDsKICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJs
YWNrOworICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwRkZGRjsKICAgICB9CiAKICAgICAuc2Ny
b2xsZWQgewogICAgICAgd2lkdGg6IDE4MHB4OwotICAgICAgaGVpZ2h0OiA5MHB4OworICAgICAg
aGVpZ2h0OiAzMHB4OwogICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgdG9wOiA3MHB4OwogICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsKICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAg
ICB9CkBAIC0yNSwyNSArMjcsMzIgQEAKICAgICAucG9zaXRpb25lZCB7CiAgICAgICB3aWR0aDog
MTIwcHg7CiAgICAgICBoZWlnaHQ6IDI0MHB4OwotICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3Jl
ZW47CiAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgfQogCisgICAgI3NlY29uZENoaWxk
IHsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDQzk5OTk7CisgICAgICB0b3A6IDUwcHg7Cisg
ICAgfQorCiAgICAgI3ByZWRlY2Vzc29yIHsKICAgICAgIGxlZnQ6IDIwcHg7CiAgICAgICB0b3A6
IDIwcHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTkwMDY2OwogICAgIH0KIAogICAgICNz
dWNjZXNzb3IgewotICAgICAgbGVmdDogMTYwcHg7CisgICAgICBsZWZ0OiAyMHB4OwogICAgICAg
dG9wOiAyMHB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDA2NjsKICAgICB9CiAKLSAg
ICAjZGVzY2VuZGFudCB7Ci0gICAgICBsZWZ0OiA5MHB4OwotICAgICAgdG9wOiAyMHB4OwotICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKLSAgICAgIHotaW5kZXg6IC0yMDsKKyAgICAjbm9y
bWFsRmxvdyB7CisgICAgICB3aWR0aDogMTgwcHg7CisgICAgICBoZWlnaHQ6IDMwcHg7CisgICAg
ICBtYXJnaW46IDEwcHg7CisgICAgICB0b3A6IC0yMHB4OworICAgICAgYmFja2dyb3VuZC1jb2xv
cjogeWVsbG93OwogICAgIH0KICAgPC9zdHlsZT4KICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KQEAgLTUyLDkgKzYxLDYgQEAKICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCiAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKIAotICAgIGlmICh3
aW5kb3cuaW50ZXJuYWxzKQotICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKHRydWUpOwotCiAgICAg
ZnVuY3Rpb24gd3JpdGUoc3RyKQogICAgIHsKICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29uc29sZScpOwpAQCAtNjIsMTY5ICs2OCwxOTUgQEAKICAgICAgIHByZS5h
cHBlbmRDaGlsZCh0ZXh0KTsKICAgICB9CiAKLSAgICB2YXIgaXRlcmF0aW9uID0gMDsKLSAgICBm
dW5jdGlvbiBwcmludFJlc3VsdChleHBlY3RlZFJlc3VsdCkKKyAgICBmdW5jdGlvbiBkaWRPcHRJ
bigpCisgICAgeworICAgICAgLy8gRm9yY2UgYSBzdHlsZSByZWNhbGMuCisgICAgICBkb2N1bWVu
dC5ib2R5Lm9mZnNldFRvcDsKKworICAgICAgLy8gRm9yY2UgYSBsYXlvdXQuCisgICAgICB3aW5k
b3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisgICAgICB2YXIgbGF5ZXJUcmVl
ID0gd2luZG93LmludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQpOworCisgICAgICBp
ZiAoZGVidWdNb2RlKQorICAgICAgICAgIHdyaXRlKGxheWVyVHJlZSk7CisKKyAgICAgIHJldHVy
biAhIWxheWVyVHJlZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRTdGFja2luZ09yZGVyKCkK
ICAgICB7CisgICAgICB2YXIgZGl2RWxlbWVudHMgPSBbXTsKICAgICAgIC8vIEZvcmNlIGEgc3R5
bGUgcmVjYWxjLgogICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CiAKLSAgICAgIGlmICh3
aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgotICAgICAgICB3
aW5kb3cuaW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7Ci0gICAgICAgIHZhciBsYXll
clRyZWUgPSB3aW5kb3cuaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCk7Ci0KLSAg
ICAgICAgaWYgKCFsYXllclRyZWUgPT0gIWV4cGVjdGVkUmVzdWx0KQotICAgICAgICAgIHdyaXRl
KCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmluZygpICsgJzogUGFzc2VkJykKLSAgICAg
ICAgZWxzZQotICAgICAgICAgIHdyaXRlKCdJdGVyYXRpb24gJyArIGl0ZXJhdGlvbi50b1N0cmlu
ZygpICsgJzogRkFJTEVEJykKLQotICAgICAgICBpZiAobGF5ZXJUcmVlKSB7Ci0gICAgICAgICAg
d3JpdGUoJ0l0ZXJhdGlvbiAnICsgaXRlcmF0aW9uLnRvU3RyaW5nKCkgKyAnLCBsYXllciB0cmVl
Jyk7Ci0gICAgICAgICAgaWYgKGRlYnVnTW9kZSkKLSAgICAgICAgICAgICAgd3JpdGUobGF5ZXJU
cmVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgd3JpdGUoJ0l0ZXJhdGlvbiAnICsgaXRl
cmF0aW9uLnRvU3RyaW5nKCkgKyAnLCBubyBsYXllciB0cmVlJyk7CisgICAgICAvLyBGb3JjZSBh
IGxheW91dC4KKyAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYm91bmRpbmdCb3goY29udGFpbmVyKTsK
KworICAgICAgdmFyIGVycm9yQ29kZSA9IDA7CisgICAgICB2YXIgc3RhY2tpbmdPcmRlciA9IHdp
bmRvdy5pbnRlcm5hbHMubm9kZXNGcm9tUmVjdChkb2N1bWVudCwgMTAwLCA3NSwgMjAwLCAyMDAs
IDIwMCwgMjAwLCBmYWxzZSwgZmFsc2UsIGVycm9yQ29kZSk7CisKKyAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3RhY2tpbmdPcmRlci5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoc3RhY2tp
bmdPcmRlcltpXS5ub2RlTmFtZSA9PT0gIkRJViIpIHsKKyAgICAgICAgICBkaXZFbGVtZW50cy5w
dXNoKHN0YWNraW5nT3JkZXJbaV0pOworICAgICAgICB9CiAgICAgICB9Ci0gICAgICBpdGVyYXRp
b24rKzsKKworICAgICAgcmV0dXJuIGRpdkVsZW1lbnRzOwogICAgIH0KIAogICAgIGZ1bmN0aW9u
IGRvVGVzdCgpCiAgICAgeworICAgICAgdmFyIGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2FuY2VzdG9yJyk7CiAgICAgICB2YXIgcHJlZGVjZXNzb3IgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgncHJlZGVjZXNzb3InKTsKICAgICAgIHZhciBzdWNjZXNzb3IgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnc3VjY2Vzc29yJyk7CiAgICAgICB2YXIgY29udGFpbmVyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOwogICAgICAgdmFyIGZpcnN0Q2hpbGQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3RDaGlsZCcpOwogICAgICAgdmFyIHNlY29u
ZENoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY29uZENoaWxkJyk7Ci0gICAgICB2
YXIgZGVzY2VuZGFudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXNjZW5kYW50Jyk7CiAg
ICAgICB2YXIgY291bnQgPSAwOwogCi0gICAgICBkZXNjZW5kYW50LnN0eWxlLmRpc3BsYXkgPSAn
bm9uZSc7Ci0KLSAgICAgIC8vIGRlc2NlbmRhbnRzIGluIHN0YWNraW5nIG9yZGVyLgotICAgICAg
Zm9yIChpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgNTsgKytq
KSB7Ci0gICAgICAgICAgZm9yIChrID0gMDsgayA8IDI7ICsraykgewotICAgICAgICAgICAgZm9y
IChsID0gMDsgbCA8IDI7ICsrbCkgewotICAgICAgICAgICAgICB2YXIgbWluWkluZGV4ID0gMDsK
LSAgICAgICAgICAgICAgdmFyIG1heFpJbmRleCA9IDA7Ci0gICAgICAgICAgICAgIGlmIChpID09
IDApIHsKLSAgICAgICAgICAgICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICcxJzsKLSAg
ICAgICAgICAgICAgICBzZWNvbmRDaGlsZC5zdHlsZS56SW5kZXggPSAnMyc7Ci0gICAgICAgICAg
ICAgICAgbWF4WkluZGV4ID0gMzsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IDEpIHsK
LSAgICAgICAgICAgICAgICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICctMSc7Ci0gICAgICAg
ICAgICAgICAgc2Vjb25kQ2hpbGQuc3R5bGUuekluZGV4ID0gJy0zJzsKLSAgICAgICAgICAgICAg
ICBtaW5aSW5kZXggPSAtMzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBmaXJzdENoaWxkLnN0eWxlLnpJbmRleCA9ICctMSc7Ci0gICAgICAgICAgICAgICAgc2Vjb25k
Q2hpbGQuc3R5bGUuekluZGV4ID0gJzMnOwotICAgICAgICAgICAgICAgIG1pblpJbmRleCA9IC0x
OwotICAgICAgICAgICAgICAgIG1heFpJbmRleCA9IDM7Ci0gICAgICAgICAgICAgIH0KKyAgICAg
IGZvciAodmFyIHNpYmxpbmdTaG91bGRCZVplcm9JZlByZWNlZGVzQ29udGFpbmVyID0gMDsgc2li
bGluZ1Nob3VsZEJlWmVyb0lmUHJlY2VkZXNDb250YWluZXIgPD0gMTsgKytzaWJsaW5nU2hvdWxk
QmVaZXJvSWZQcmVjZWRlc0NvbnRhaW5lcikgeworICAgICAgICBmb3IgKHZhciBjb250YWluZXJJ
c1Bvc2l0aW9uZWQgPSAwOyBjb250YWluZXJJc1Bvc2l0aW9uZWQgPD0gMTsgKytjb250YWluZXJJ
c1Bvc2l0aW9uZWQpIHsKKyAgICAgICAgICBmb3IgKHZhciBzaWJsaW5nSXNTdWNjZXNzb3IgPSAw
OyBzaWJsaW5nSXNTdWNjZXNzb3IgPD0gMTsgKytzaWJsaW5nSXNTdWNjZXNzb3IpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9IDA7IGhhc1Bvc2l0aW9uZWRB
bmNlc3RvciA8PSAxOyArK2hhc1Bvc2l0aW9uZWRBbmNlc3RvcikgeworICAgICAgICAgICAgICB2
YXIgaW5kaWNlcyA9IFsgMCwgMSwgMiwgMyBdOworICAgICAgICAgICAgICBmb3IgKHZhciBzaWJs
aW5nSW5kZXggPSAwOyBzaWJsaW5nSW5kZXggPCA0OyArK3NpYmxpbmdJbmRleCkgeworICAgICAg
ICAgICAgICAgIHZhciBzaWJsaW5nSW5kaWNlcyA9IGluZGljZXMuc2xpY2UoMCk7CisgICAgICAg
ICAgICAgICAgc2libGluZ0luZGljZXMuc3BsaWNlKHNpYmxpbmdJbmRleCwgMSk7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgY29udGFpbmVyU3ViaW5kZXggPSAwOyBjb250YWluZXJTdWJpbmRl
eCA8IDM7ICsrY29udGFpbmVyU3ViaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBjb250
YWluZXJJbmRpY2VzID0gc2libGluZ0luZGljZXMuc2xpY2UoMCk7CisgICAgICAgICAgICAgICAg
ICB2YXIgY29udGFpbmVySW5kZXggPSBjb250YWluZXJJbmRpY2VzW2NvbnRhaW5lclN1YmluZGV4
XTsKKyAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckluZGljZXMuc3BsaWNlKGNvbnRhaW5lclN1
YmluZGV4LCAxKTsKKyAgICAgICAgICAgICAgICAgIHZhciBmaXJzdENoaWxkSW5kZXggPSBjb250
YWluZXJJbmRpY2VzWzBdOworICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZENoaWxkSW5kZXgg
PSBjb250YWluZXJJbmRpY2VzWzFdOwogCi0gICAgICAgICAgICAgIHZhciBzaWJsaW5nID0gcHJl
ZGVjZXNzb3I7Ci0gICAgICAgICAgICAgIHZhciB0b0hpZGUgPSBzdWNjZXNzb3I7Ci0gICAgICAg
ICAgICAgIGlmIChrID09IDEpIHsKLSAgICAgICAgICAgICAgICBzaWJsaW5nID0gc3VjY2Vzc29y
OwotICAgICAgICAgICAgICAgIHRvSGlkZSA9IHByZWRlY2Vzc29yOwotICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICB2YXIgc2libGluZ1ByZWNlZGVzQ29udGFpbmVyID0gc2libGlu
Z0luZGV4ID09IGNvbnRhaW5lckluZGV4IC0gMTsKKyAgICAgICAgICAgICAgICAgIGlmIChmaXJz
dENoaWxkSW5kZXggPiBzZWNvbmRDaGlsZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAx
ICYmIGhhc1Bvc2l0aW9uZWRBbmNlc3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmdTaG91bGRCZVplcm9JZlByZWNl
ZGVzQ29udGFpbmVyID09IDEgJiYgIXNpYmxpbmdQcmVjZWRlc0NvbnRhaW5lcikKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgIHZhciBvcmRlcmluZyA9
IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCBdOworICAgICAgICAgICAgICAgICAgb3JkZXJpbmdb
c2libGluZ0luZGV4XSA9IHNpYmxpbmdJc1N1Y2Nlc3NvciA9PSAxID8gc3VjY2Vzc29yIDogcHJl
ZGVjZXNzb3I7CisgICAgICAgICAgICAgICAgICBvcmRlcmluZ1tjb250YWluZXJJbmRleF0gPSBo
YXNQb3NpdGlvbmVkQW5jZXN0b3IgPT0gMSA/IGFuY2VzdG9yIDogY29udGFpbmVyOworICAgICAg
ICAgICAgICAgICAgb3JkZXJpbmdbZmlyc3RDaGlsZEluZGV4XSA9IGZpcnN0Q2hpbGQ7CisgICAg
ICAgICAgICAgICAgICBvcmRlcmluZ1tzZWNvbmRDaGlsZEluZGV4XSA9IHNlY29uZENoaWxkOwor
CisgICAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IHByZWRlY2Vzc29yOworICAgICAgICAg
ICAgICAgICAgdmFyIHRvSGlkZSA9IHN1Y2Nlc3NvcjsKKyAgICAgICAgICAgICAgICAgIGlmIChz
aWJsaW5nSXNTdWNjZXNzb3IgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBzaWJsaW5nID0g
c3VjY2Vzc29yOworICAgICAgICAgICAgICAgICAgICB0b0hpZGUgPSBwcmVkZWNlc3NvcjsKKyAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgdG9IaWRlLnN0eWxlLmRpc3Bs
YXkgPSAnbm9uZSc7CisgICAgICAgICAgICAgICAgICBzaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAn
JzsKKworICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uZWQgPSBudWxsOworICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnRhaW5lcklzUG9zaXRpb25lZCA9PSAxKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICAgICAg
ICAgICAgICAgIHBvc2l0aW9uZWQgPSBjb250YWluZXI7CisgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJyc7CiAK
LSAgICAgICAgICAgICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUgaWYgdGhlIHRo
ZSBlbGVtZW50IHRvIGhpZGUgaXMKLSAgICAgICAgICAgICAgLy8gZGlzcGxheTpoaWRkZW4gb3Ig
ZGlzcGxheTpub25lLgotICAgICAgICAgICAgICBpZiAobCA9PSAwKQotICAgICAgICAgICAgICAg
IHRvSGlkZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdG9IaWRlLnN0eWxlLmRpc3BsYXkgPSAnaGlkZGVuJzsKLQotICAgICAgICAg
ICAgICBzaWJsaW5nLnN0eWxlLmRpc3BsYXkgPSAnJzsKLQotICAgICAgICAgICAgICBpZiAoaiA9
PSAwKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gKG1heFpJbmRleCAr
IDEpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGogPT0gMSkKLSAgICAgICAg
ICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA9IChtaW5aSW5kZXggLSAxKS50b1N0cmluZygp
OwotICAgICAgICAgICAgICBlbHNlIGlmIChqID09IDIpCi0gICAgICAgICAgICAgICAgc2libGlu
Zy5zdHlsZS56SW5kZXggPSBtYXhaSW5kZXgudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgZWxz
ZSBpZiAoaiA9PSAzKQotICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID0gbWlu
WkluZGV4LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
aWJsaW5nLnN0eWxlLnpJbmRleCA9ICgobWluWkluZGV4ICsgbWF4WkluZGV4KSAvIDIpLnRvU3Ry
aW5nKCk7Ci0KLSAgICAgICAgICAgICAgdmFyIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgaWYgKHNpYmxpbmcuc3R5bGUuekluZGV4ID4gbWF4WkluZGV4IHx8Ci0gICAgICAg
ICAgICAgICAgICBzaWJsaW5nLnN0eWxlLnpJbmRleCA8IG1pblpJbmRleCkgewotICAgICAgICAg
ICAgICAgICAgLy8gc2libGluZyBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBvdXIgZGVzY2VuZGFu
dHMuCi0gICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChzaWJsaW5nLnN0eWxlLnpJbmRleCA8IG1heFpJbmRleCAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpYmxpbmcuc3R5bGUuekluZGV4ID4gbWluWkluZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIGlzIGJldHdlZW4gb3VyIGRlc2NlbmRhbnRzLgot
ICAgICAgICAgICAgICAgICAgYXJlQ29udGlndW91cyA9IGZhbHNlOwotICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHNpYmxpbmcuc3R5bGUuekluZGV4ID09IG1pblpJbmRleCkgewotICAgICAgICAg
ICAgICAgICAgaWYgKG1pblpJbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8g
c2libGluZyBsaWVzIGJldHdlZW4gdXMgKG5vcm1hbCBmbG93KSBhbmQgb3VyIHBvcwotICAgICAg
ICAgICAgICAgICAgICAgIC8vIHotb3JkZXIgZGVzY2VuZGFudHMsIHNvIHdlIGFyZSBub3QgY29u
dGlndW91cy4KLSAgICAgICAgICAgICAgICAgICAgICBhcmVDb250aWd1b3VzID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIC8vIHNpYmxp
bmcncyB6SW5kZXggbWF0Y2hlcyB0aGUgbWluOyB3ZSdyZSBvbmx5IG9rIGlmIGl0Ci0gICAgICAg
ICAgICAgICAgICAgICAgLy8gYXBwZWFycyBmaXJzdC4KLSAgICAgICAgICAgICAgICAgICAgICBh
cmVDb250aWd1b3VzID0gayA9PSAwOworICAgICAgICAgICAgICAgICAgaWYgKGhhc1Bvc2l0aW9u
ZWRBbmNlc3RvciA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLnN0eWxlLnBv
c2l0aW9uID0gJ3JlbGF0aXZlJzsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCA9IGFu
Y2VzdG9yOworICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFu
Y2VzdG9yLnN0eWxlLnBvc2l0aW9uID0gJyc7CisKKyAgICAgICAgICAgICAgICAgIC8vIEFzc2ln
biB6LWluZGljZXMuCisgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySXNQb3NpdGlvbmVk
ID09IDEgfHwgaGFzUG9zaXRpb25lZEFuY2VzdG9yID09IDEpCisgICAgICAgICAgICAgICAgICAg
IG9yZGVyaW5nW2NvbnRhaW5lckluZGV4XS5zdHlsZS56SW5kZXggPSAnMCc7CisgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnpJbmRl
eCA9ICcnOworICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5zdHlsZS56SW5kZXggPSAnJzsK
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWJsaW5nLnN0
eWxlLnpJbmRleCA9PSBtYXhaSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChtYXhaSW5k
ZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLy8gc2libGluZyBsaWVzIGJldHdlZW4g
dXMgKG5vcm1hbCBmbG93KSBhbmQgbmVnIHotb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgICAv
LyBkZXNjZW5kYW50cywgc28gd2UgYXJlIG5vdCBjb250aWd1b3VzLgotICAgICAgICAgICAgICAg
ICAgICAgIGFyZUNvbnRpZ3VvdXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobWF4WkluZGV4ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBzaWJsaW5nIGlz
IGluIHRoZSBwb3Mgei1vcmRlciBsaXN0IGFuZCBkb2VzIG5vdCBhZmZlY3QKLSAgICAgICAgICAg
ICAgICAgICAgICAvLyB1cyBzaW5jZSB3ZSdyZSBpbiB0aGUgbm9ybWFsIGZsb3cgbGlzdCBhbmQg
b3VyCi0gICAgICAgICAgICAgICAgICAgICAgLy8gZGVzY2FuZGFudHMgYXJlIGluIHRoZSBuZWcg
ei1vcmRlciBsaXN0LgotICAgICAgICAgICAgICAgICAgICAgIGFyZUNvbnRpZ3VvdXMgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBz
aWJsaW5nJ3MgekluZGV4IG1hdGNoZXMgdGhlIG1heDsgd2UncmUgb25seSBvayBpZiBpdAotICAg
ICAgICAgICAgICAgICAgICAgIC8vIGFwcGVhcnMgYWZ0ZXIuCi0gICAgICAgICAgICAgICAgICAg
ICAgYXJlQ29udGlndW91cyA9IGsgPT0gMTsKKworICAgICAgICAgICAgICAgICAgdmFyIGN1cnJl
bnRaSW5kZXggPSBzaWJsaW5nUHJlY2VkZXNDb250YWluZXIgJiYgc2libGluZ1Nob3VsZEJlWmVy
b0lmUHJlY2VkZXNDb250YWluZXIgPT0gMSA/IDAgOiAtMTsKKyAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGN1cnJlbnRJbmRleCA9IGNvbnRhaW5lckluZGV4IC0gMTsgY3VycmVudEluZGV4ID49
IDA7IC0tY3VycmVudEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIG9yZGVyaW5nW2N1cnJl
bnRJbmRleF0uc3R5bGUuekluZGV4ID0gY3VycmVudFpJbmRleC50b1N0cmluZygpOworICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50WkluZGV4LS07CiAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICBwcmludFJlc3VsdChhcmVDb250aWd1b3VzKTsK
LSAgICAgICAgICAgIH0gLy8gZm9yIGwKLSAgICAgICAgICB9IC8vIGZvciBrCi0gICAgICAgIH0g
Ly8gZm9yIGoKLSAgICAgIH0gLy8gZm9yIGkKLQotICAgICAgLy8gTm93IGNoZWNrIHRoYXQgd2Ug
ZG9uJ3QgcHJvbW90ZSBpZiB3ZSBoYXZlIGFuIG91dCBvZiBmbG93IGRlc2NlbmRhbnQuCi0gICAg
ICAvLyBXZSBuZWVkIHRvIGhpZGUgdGhlIHByZWRlY2Vzc29yIGFuZCBzdWNjZXNzb3Igc28gdGhl
eSBkb24ndCBpbnRlcmZlcmUKLSAgICAgIC8vIHdpdGggdGhpcyBleHBlcmltZW50LgotICAgICAg
cHJlZGVjZXNzb3Iuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgIHN1Y2Nlc3Nvci5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgICAgZm9yIChpID0gMDsgaSA8IDM7ICsraSkgewotICAg
ICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgIGRlc2NlbmRhbnQuc3R5bGUuZGlzcGxheSA9ICdo
aWRkZW4nOwotICAgICAgICBlbHNlIGlmIChpID09IDEpCi0gICAgICAgICAgZGVzY2VuZGFudC5z
dHlsZS5kaXNwbGF5ID0gJyc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkZXNjZW5kYW50LnN0
eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG91dCBvZiBmbG93IHBv
c2l0aW9uZWQgZGVzY2VuZGFudCBpcyB2aXNpYmxlLCB3ZSBjYW5ub3Qgb3B0Ci0gICAgICAgIC8v
IGludG8gY29tcG9zaXRlZCBzY3JvbGxpbmcuCi0gICAgICAgIHByaW50UmVzdWx0KGkgIT0gMSk7
Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgICB9IC8vIGZvciBpCisgICAgICAgICAgICAgICAgICBj
dXJyZW50WkluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1cnJlbnRJbmRl
eCA9IGNvbnRhaW5lckluZGV4ICsgMTsgY3VycmVudEluZGV4IDwgNDsgKytjdXJyZW50SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgb3JkZXJpbmdbY3VycmVudEluZGV4XS5zdHlsZS56SW5k
ZXggPSBjdXJyZW50WkluZGV4LnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRaSW5kZXgrKzsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVsb3csIHdoZW4g
d2Ugc2V0IHdlYmtpdFRyYW5zZm9ybSB0byAnJywgd2Ugd2FudCB0aGF0IHRvIGZvcmNlIGEgc3R5
bGUgcmVjYWxjdWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gTWFraW5nIHRoaXMgbm90
ICcnIGhlcmUgd2lsbCBmb3JjZSB0aGlzIHJlY2FsY3VsYXRpb24uCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWigwcHgpJzsK
KyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gZm9yY2UgdG8gbm90IHByb21vdGUuCisgICAgICAgICAgICAgICAgICAg
IHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92
ZXJmbG93U2Nyb2xsRW5hYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5l
ci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAnJzsKKworICAgICAgICAgICAgICAgICAgICB2YXIg
b2xkU3RhY2tpbmdPcmRlciA9IGdldFN0YWNraW5nT3JkZXIoKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBmb3JjZSB0byBwcm9tb3RlLgorICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50
ZXJuYWxzLnNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9s
bEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJr
aXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWigwcHgpJzsKKworICAgICAgICAgICAgICAgICAgICB2
YXIgbmV3U3RhY2tpbmdPcmRlciA9IGdldFN0YWNraW5nT3JkZXIoKTsKIAorICAgICAgICAgICAg
ICAgICAgICB2YXIgc2hvdWxkT3B0SW4gPSBvbGRTdGFja2luZ09yZGVyLmxlbmd0aCA9PSBuZXdT
dGFja2luZ09yZGVyLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBvbGRTdGFja2luZ09yZGVyLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9sZFN0YWNraW5nT3JkZXJbaV0gIT0gbmV3U3RhY2tpbmdPcmRlcltpXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkT3B0SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFu
c2Zvcm0gPSAnJzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE9wdEluICE9IGRpZE9w
dEluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkT3B0SW4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlKCJGQUlMIC0gc2hvdWxkJ3ZlIGF1dG9tYXRpY2FsbHkg
b3B0ZWQgaW4gYnV0IGRpZG4ndCAiICsgY291bnQpOworICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnRkFJTCAtIGF1dG9tYXRpY2Fs
bHkgb3B0ZWQgaW4gYW5kIGNoYW5nZWQgc3RhY2tpbmcgb3JkZXIgJyArIGNvdW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0KICAgICB9IC8vIGZ1bmN0aW9uIGRvVGVzdAogCisgICAgZnVuY3Rpb24gdG9nZ2xlKCkg
eworICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWlu
ZXInKTsKKyAgICAgIGNvbnRhaW5lci5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBjb250YWluZXIu
c3R5bGUud2Via2l0VHJhbnNmb3JtID8gJycgOiAndHJhbnNsYXRlWigwcHgpJzsKKworICAgICAg
Ly8gRm9yY2UgYSBzdHlsZSByZWNhbGMuCisgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsK
KworICAgICAgLy8gRm9yY2UgYSBsYXlvdXQuCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLmJvdW5k
aW5nQm94KGNvbnRhaW5lcik7CisgICAgfQorCiAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CiAKIDxib2R5Pgot
ICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0icHJlZGVjZXNzb3IiPjwvZGl2PgotICA8ZGl2
IGNsYXNzPSJjb250YWluZXIiIGlkPSJjb250YWluZXIiPgotICAgIDxkaXYgY2xhc3M9InNjcm9s
bGVkIiBpZD0iZmlyc3RDaGlsZCI+PC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlk
PSJzZWNvbmRDaGlsZCI+PC9kaXY+Ci0gICAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9ImRl
c2NlbmRhbnQiPjwvZGl2PgorICA8ZGl2IGlkPSJhbmNlc3RvciI+CisgICAgPGRpdiBjbGFzcz0i
cG9zaXRpb25lZCIgaWQ9InByZWRlY2Vzc29yIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb250
YWluZXIiIGlkPSJjb250YWluZXIiPgorICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsZWQiIGlkPSJm
aXJzdENoaWxkIj48L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InNjcm9sbGVkIiBpZD0ic2Vjb25k
Q2hpbGQiPjwvZGl2PgorICAgICAgPGRpdiBpZD0ibm9ybWFsRmxvdyI+PC9kaXY+CisgICAgPC9k
aXY+CisgICAgPGRpdiBjbGFzcz0icG9zaXRpb25lZCIgaWQ9InN1Y2Nlc3NvciI+PC9kaXY+CiAg
IDwvZGl2PgotICA8ZGl2IGNsYXNzPSJwb3NpdGlvbmVkIiBpZD0ic3VjY2Vzc29yIj48L2Rpdj4K
ICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8L2JvZHk+CiA8L2h0bWw+Ci0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQt
c2Nyb2xsaW5nLXBvc2l0aW9uZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRp
b25lZC1hbmNlc3Rvci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThjMTBkYmExZjhhYmFjYTRk
ZjI5MTMxOWFmMmUyY2I3NjdhNjlkOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL292ZXJmbG93L29wdC1pbnRvLWNvbXBvc2l0ZWQtc2Nyb2xsaW5nLXBvc2l0aW9u
ZWQtYW5jZXN0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorUGFzc2VkIC0gbGF5ZXIg
dHJlZS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0
LWludG8tY29tcG9zaXRlZC1zY3JvbGxpbmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sIGIvTGF5
b3V0VGVzdHMvY29tcG9zaXRpbmcvb3ZlcmZsb3cvb3B0LWludG8tY29tcG9zaXRlZC1zY3JvbGxp
bmctcG9zaXRpb25lZC1hbmNlc3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjA1YWU5ZGFjNTU0MGE5
OGUwYmJkZDUwMjg4ZDM2NDdkM2MwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9j
b21wb3NpdGluZy9vdmVyZmxvdy9vcHQtaW50by1jb21wb3NpdGVkLXNjcm9sbGluZy1wb3NpdGlv
bmVkLWFuY2VzdG9yLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICAiaHR0cDovL3d3
dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKworPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+
CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBj
aGFyc2V0PXV0Zi04Ii8+CisgIDx0aXRsZT5PcHRpbmcgaW50byBjb21wb3NpdGVkIHNjcm9sbGlu
ZzwvdGl0bGU+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAg
LmNvbnRhaW5lciB7CisgICAgICB3aWR0aDogMjAwcHg7CisgICAgICBoZWlnaHQ6IDIwMHB4Owor
ICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgICAgIG1hcmdpbjogMjBweDsKKyAgICAgIGJvcmRl
cjogMXB4IHNvbGlkIGJsYWNrOworICAgIH0KKworICAgIC5zY3JvbGxlZCB7CisgICAgICB3aWR0
aDogMTgwcHg7CisgICAgICBoZWlnaHQ6IDkwcHg7CisgICAgICBtYXJnaW46IDEwcHg7CisgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OworICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg
IH0KKworICAgIC5wb3NpdGlvbmVkIHsKKyAgICAgIHdpZHRoOiAxMjBweDsKKyAgICAgIGhlaWdo
dDogMjQwcHg7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgfQorCisgICAgI2ZpcnN0
Q2hpbGQgeworICAgICAgei1pbmRleDogMTsKKyAgICB9CisKKyAgICAjc2Vjb25kQ2hpbGQgewor
ICAgICAgei1pbmRleDogMjsKKyAgICB9CisKKyAgICAjcHJlZGVjZXNzb3IgeworICAgICAgbGVm
dDogMjBweDsKKyAgICAgIHRvcDogMjBweDsKKyAgICAgIHotaW5kZXg6IDA7CisgICAgICBiYWNr
Z3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICB9CisKKyAgICAjYW5jZXN0b3IgeworICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICB9CisKKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICB2YXIgZGVidWdNb2RlID0g
ZmFsc2U7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICB0ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgd2luZG93Lmlu
dGVybmFscy5zZXR0aW5ncy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3Jv
bGxFbmFibGVkKHRydWUpOworCisgICAgZnVuY3Rpb24gd3JpdGUoc3RyKQorICAgIHsKKyAgICAg
IHZhciBwcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAgICAgdmFy
IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIgKyAnXG4nKTsKKyAgICAgIHByZS5h
cHBlbmRDaGlsZCh0ZXh0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkb1Rlc3QoKQorICAgIHsK
KyAgICAgIHZhciBwcmVkZWNlc3NvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVkZWNl
c3NvcicpOworICAgICAgdmFyIGFuY2VzdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fu
Y2VzdG9yJyk7CisgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnRhaW5lcicpOworICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZmlyc3RDaGlsZCcpOworICAgICAgdmFyIHNlY29uZENoaWxkID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NlY29uZENoaWxkJyk7CisKKyAgICAgIC8vIEZvcmNlIGEgc3R5bGUgcmVj
YWxjLgorICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisKKyAgICAgIGlmICh3aW5kb3cu
aW50ZXJuYWxzKSB7CisgICAgICAgIC8vIEZvcmNlIGEgbGF5b3V0LgorICAgICAgICB3aW5kb3cu
aW50ZXJuYWxzLmJvdW5kaW5nQm94KGNvbnRhaW5lcik7CisgICAgICAgIHZhciBsYXllclRyZWUg
PSB3aW5kb3cuaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCk7CisKKyAgICAgICAg
aWYgKCFsYXllclRyZWUpCisgICAgICAgICAgd3JpdGUoJ0ZBSUxFRCAtIG5vIGxheWVyIHRyZWUu
JykKKyAgICAgICAgZWxzZQorICAgICAgICAgIHdyaXRlKCdQYXNzZWQgLSBsYXllciB0cmVlLicp
CisKKyAgICAgICAgaWYgKGxheWVyVHJlZSAmJiBkZWJ1Z01vZGUpCisgICAgICAgICAgICB3cml0
ZShsYXllclRyZWUpOworICAgICAgfQorICAgIH0gLy8gZnVuY3Rpb24gZG9UZXN0CisKKyAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICA8L3Njcmlw
dD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJwcmVk
ZWNlc3NvciI+PC9kaXY+CisgIDxkaXYgY2xhc3M9InBvc2l0aW9uZWQiIGlkPSJhbmNlc3RvciI+
CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBpZD0iY29udGFpbmVyIj4KKyAgICAgIDxkaXYg
Y2xhc3M9InNjcm9sbGVkIiBpZD0iZmlyc3RDaGlsZCI+PC9kaXY+CisgICAgICA8ZGl2IGNsYXNz
PSJzY3JvbGxlZCIgaWQ9InNlY29uZENoaWxkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+
CisgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNTc0ZGNhMDEx
NGNkMjNjM2I3ZjliZmUxZTc4YmExMzcwN2VmZmMxYy4uYzdjM2E4ZmFlZGE3NjU5YTIyZDFjMGI0
YjJkMzkxNDMzZjBhNWY5YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9U
ZXN0RXhwZWN0YXRpb25zCkBAIC0zNjk1LDYgKzM2OTUsMTMgQEAgd2Via2l0Lm9yZy9iLzEwMzE1
NiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9jb21wb3NpdGVkc2Nyb2xsaW5nL3Njcm9s
bGJhcnMKICMgUmVxdWlyZXMgYW4gdXBkYXRlZCBiYXNlbGluZSBhZnRlciAxMDYxNDIuCiB3ZWJr
aXQub3JnL2IvMTA2ODIwIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2NvbXBvc2l0ZWRz
Y3JvbGxpbmcvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgWyBGYWlsdXJlIF0KIAorIyBO
ZWVkcyByZWJhc2VsaW5lIGFmdGVyIDEwOTMwMi4KK3dlYmtpdC5vcmcvYi8xMDk5NjUgcGxhdGZv
cm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9vdmVyZmxvdy90ZXh0
YXJlYS1zY3JvbGwtdG91Y2guaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzEwOTk2NSBw
bGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcvb3ZlcmZsb3cvdGV4
dGFyZWEtc2Nyb2xsLXRvdWNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xMDk5NjUg
cGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY29tcG9zaXRlZHNjcm9sbGluZy9zY3JvbGxi
YXJzL292ZXJmbG93LXNjcm9sbGJhci1jb21iaW5hdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzEwOTk2NSBjb21wb3NpdGluZy9vdmVyZmxvdy90ZXh0YXJlYS1zY3JvbGwtdG91
Y2guaHRtbCBbIEZhaWx1cmUgXQorCisKICMgRmFpbHMgZHVlIHRvIEJ1ZyA4NTg1Ni4KIHdlYmtp
dC5vcmcvYi84NTg1NiBbIFdpbiBNYWMgQW5kcm9pZCBdIGZhc3QvYmxvY2svZmxvYXQvMDI4Lmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi84NTg1NiBbIFdpbiBNYWMgQW5k
cm9pZCBdIGZhc3QvYmxvY2svZmxvYXQvMDI2Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
</data>

          </attachment>
      

    </bug>

</bugzilla>